内容如下:编号 数据编号 名称 内容
1 001 姓名 张三
2 001 性别 男
3 001 年龄 17就是,根据数据编号,得知这三条数据属于同一个数据,是否可以用SQL语句,查询出来,并且组成一条查询结果返回,即返回编号 姓名 性别 年龄
1 张三 男 17是否可以查询出前3年数据并组成上面1条数据返回给dataset数据集???谢谢,盼复
1 001 姓名 张三
2 001 性别 男
3 001 年龄 17就是,根据数据编号,得知这三条数据属于同一个数据,是否可以用SQL语句,查询出来,并且组成一条查询结果返回,即返回编号 姓名 性别 年龄
1 张三 男 17是否可以查询出前3年数据并组成上面1条数据返回给dataset数据集???谢谢,盼复
Select
数据编号,
Max(Case 名称 When '姓名' Then 内容 Else '' End) As 姓名,
Max(Case 名称 When '性别' Then 内容 Else '' End) As 性别,
Max(Case 名称 When '年龄' Then 内容 Else '' End) As 年龄
From
表
Group By
数据编号
Declare @S Varchar(8000)
Select @S = 'Select 数据编号'
Select @S = @S + ' Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
From 表 Group By 名称 Order By Min(编号)
Select @S = @S + ' From 表 Group By 数据编号'
EXEC(@S)
1 001 姓名 张三
2 001 性别 男
3 001 年龄 17
4 002 姓名 李四
5 002 性别 男
6 002 年龄 19就是,根据数据编号,得知这三条数据属于同一个数据,是否可以用SQL语句,查询出来,并且组成一条查询结果返回,即返回编号 姓名 性别 年龄
1 张三 男 17
2 李四 男 19只能是数据编号一样的组成一组。如果改成这个数据表就应该返回2条数据。。谢谢,盼复
insert tab
select 1 , '001' , '姓名', '张三'
union select 2 , '001' ,'性别', '男'
union select 3 , '001' ,'年龄', '17'
declare @str varchar(8000)
set @str='select 编号=cast(数据编号 as int)'
select @str=@str+','+名称+'=max(case when 内容='''+内容+''' then 内容 else '''' end)'
from tab
group by 数据编号,名称,内容exec(@str+' From tab Group By 数据编号')drop table tab
姓名、性别、年龄。都是不知道的。具体哪几个可以组成一条数据。是通过数据标号的。
------------用我下面寫的那個。Declare @S Varchar(8000)
Select @S = 'Select 数据编号'
Select @S = @S + ' Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
From 表 Group By 名称 Order By Min(编号)
Select @S = @S + ' From 表 Group By 数据编号'
EXEC(@S)
Select @S = 'Select 数据编号'
Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
From 表 Group By 名称 Order By Min(编号)
Select @S = @S + ' From 表 Group By 数据编号'
EXEC(@S)
在关键字 'Case' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'Case' 附近有语法错误。
-------------:),有bug。用這個Declare @S Varchar(8000)
Select @S = 'Select 数据编号'
Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
From 表 Group By 名称 Order By Min(编号)
Select @S = @S + ' From 表 Group By 数据编号'
EXEC(@S)
Select @S = @S + ' From 表 Group By 数据编号'
Select @S = 'Select 数据编号'
Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
From 表 Group By 名称 Order By Min(编号)
Select @S = @S + ' From 表 Group By 数据编号'
EXEC(@S)這個動態語句中,@S中最終執行的語句就是這個Select
数据编号,
Max(Case 名称 When '姓名' Then 内容 Else '' End) As 姓名,
Max(Case 名称 When '性别' Then 内容 Else '' End) As 性别,
Max(Case 名称 When '年龄' Then 内容 Else '' End) As 年龄
From
表
Group By
数据编号這樣,你對比這兩個,應該容易理解些。
From 表 Group By 名称 Order By Min(编号) 为何要写上??? 其他的都能明白
现在,我就是不明白
From 表 Group By 名称 Order By Min(编号) 为何要写上??? 其他的都能明白
------------Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
From 表 Group By 名称 Order By Min(编号)
這段代碼就是循環生成這段代碼, Max(Case 名称 When '姓名' Then 内容 Else '' End) As 姓名
, Max(Case 名称 When '性别' Then 内容 Else '' End) As 性别
, Max(Case 名称 When '年龄' Then 内容 Else '' End) As 年龄