首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于SQL话语,把纪录变成字段横向显示

2012-08-01 
关于SQL语句,把纪录变成字段横向显示如上图把Part表中的纪录按Class表变成字段显示..没有该个Class时显示F

关于SQL语句,把纪录变成字段横向显示


如上图

把Part表中的纪录按Class表变成字段显示..没有该个Class时显示False
每一个订单号显示一行纪录

是使用SQL语句好?,还是读到DataTable再操作好,

不知道SQL能否实现这个功能?

[解决办法]

SQL code
if object_id('[taborder]') is not null drop table [taborder]gocreate table [taborder]([预定号] int,[WBS] varchar(2))insert [taborder]select 1001,'E1' union allselect 1001,'E2' union allselect 1002,'E1'GOif object_id('[tabpart]') is not null drop table [tabpart]gocreate table [tabpart]([预定号] int,[WBS] varchar(2),[类别] varchar(6),[型号] varchar(2),[物号] int,[数量] int)insert [tabpart]select 1001,'E1','class1','A1',2000,1 union allselect 1001,'E1','class2','B1',2001,100 union allselect 1001,'E1','class3','C1',2002,1 union allselect 1001,'E2','class1','A1',2000,1 union allselect 1001,'E2','class2','B1',2001,100GOif object_id('[tabclass]') is not null drop table [tabclass]gocreate table [tabclass]([类别] varchar(6))insert [tabclass]select 'class1' union allselect 'class2' union allselect 'class3' union allselect 'class4'GOdeclare @sql varchar(8000)select @sql=isnull(@sql+',','') +'max(case when 类别='''+类别+''' then ''TRUE'' else ''FALSE'' end) as ['+类别+'],' +'max(case when 类别='''+类别+''' then 型号 end) as ['+类别+'型号],' +'max(case when 类别='''+类别+''' then 物号 end) as ['+类别+'物号],' +'sum(case when 类别='''+类别+''' then 数量 end) as ['+类别+'数量]'from tabclassset @sql='select 预定号,WBS,'+@sql+' from tabpart group by 预定号,WBS'exec (@sql)/**预定号         WBS  class1 class1型号 class1物号    class1数量    class2 class2型号 class2物号    class2数量    class3 class3型号 class3物号    class3数量    class4 class4型号 class4物号    class4数量----------- ---- ------ -------- ----------- ----------- ------ -------- ----------- ----------- ------ -------- ----------- ----------- ------ -------- ----------- -----------1001        E1   TRUE   A1       2000        1           TRUE   B1       2001        100         TRUE   C1       2002        1           FALSE  NULL     NULL        NULL1001        E2   TRUE   A1       2000        1           TRUE   B1       2001        100         FALSE  NULL     NULL        NULL        FALSE  NULL     NULL        NULL(2 行受影响)**/
[解决办法]
2楼 V5

热点排行
Bad Request.