34,590
社区成员
发帖
与我相关
我的任务
分享
create table tb(ID int,NAME varchar(10) , reason varchar(10))
insert into tb values('1','张三' , '不好用')
insert into tb values('2','李四' , '不需要')
insert into tb values('3','张三' , '有其他软件')
insert into tb values('6','张三' , '死了' )
insert into tb values('8','张三' , '活着' )
insert into tb values('11','张三' , '不好玩' )
insert into tb values('13','张三' , '真没劲' )
insert into tb values('18','张三' , '好简单' )
insert into tb values('22','张三' , '不爱答' )
DECLARE @s NVARCHAR(max)
SET @s='SELECT NAME'
SELECT @S=@S+
','+'MAX( CASE WHEN ID='+QUOTENAME(ID,N'''')+' THEN REASON END) AS REANSON'+CONVERT(VARCHAR,ROW_NUMBER()over(ORDER BY id))
FROM tb
WHERE NAME='张三'
GROUP BY ID
--PRINT (@S)
SET @S=@S+' FROM TB where name=''张三'' GROUP BY NAME'
--PRINT(@S)
EXEC(@S)
NAME REANSON1 REANSON2 REANSON3 REANSON4 REANSON5 REANSON6 REANSON7 REANSON8 REANSON9
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
张三 不好用 有其他软件 不好用 死了 活着 不好玩 真没劲 好简单 不爱答 --测试用
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb([ID] [int] IDENTITY(1,1) NOT NULL,,NAME varchar(10) , reason varchar(10))
insert into #tb values('张三' , '不好用')
insert into #tb values('李四' , '不需要')
insert into #tb values('张三' , '有其他软件')
insert into #tb values('张三' , '不好用' )
。。。
。。。。多给一点数据,做个数据表
go
[/quote]
ID是数据库自增列(有可能插入第5条数据的时候ID是8了,因为前面2条数据插入错误了),需求很清楚明白哦。
查询name为张三的结果,转换成列,下面是希望得到的结果是
id name reason1 reason2 reason3
1 张三 不好用 有其他软件 不好用
而且reason1~多少是不定的,有可能是10条,有可能是一条
--测试用
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb([ID] [int] IDENTITY(1,1) NOT NULL,,NAME varchar(10) , reason varchar(10))
insert into #tb values('张三' , '不好用')
insert into #tb values('李四' , '不需要')
insert into #tb values('张三' , '有其他软件')
insert into #tb values('张三' , '不好用' )
。。。
。。。。多给一点数据,做个数据表
go
create table tb(ID int,NAME varchar(10) , reason varchar(10))
insert into tb values('1','张三' , '不好用')
insert into tb values('2','李四' , '不需要')
insert into tb values('3','张三' , '有其他软件')
insert into tb values('4','张三' , '不好用' )
DECLARE @s NVARCHAR(max)
SET @s='SELECT NAME'
SELECT @S=@S+
','+'MAX( CASE WHEN ID='+QUOTENAME(ID,N'''')+' THEN REASON END) AS REANSON'+CONVERT(VARCHAR,ID)
FROM tb
GROUP BY ID
--PRINT (@S)
SET @S=@S+' FROM TB GROUP BY NAME'
--PRINT(@S)
EXEC(@S)
--测试用
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb(ID int,NAME varchar(10) , reason varchar(10))
insert into #tb values('1','张三' , '不好用')
insert into #tb values('2','李四' , '不需要')
insert into #tb values('3','张三' , '有其他软件')
insert into #tb values('4','张三' , '不好用' )
。。。
。。。。
go
--测试用
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb(ID int,NAME varchar(10) , reason varchar(10))
insert into #tb values('1','张三' , '不好用')
insert into #tb values('2','李四' , '不需要')
insert into #tb values('3','张三' , '有其他软件')
insert into #tb values('4','张三' , '不好用' )
go
select ID, name, reason ,
sum(case when ID=1 then 1 end) as reason1,
sum(case when ID=2 then 2 end) as reason2,
sum(case when ID=3 then 3 end) as reason3,
sum(case when ID=4 then 4 end) as reason4
from #tb
where NAME='张三'
group by ID, name, reason
ORDER BY ID