如果danhao为null的话,也要显示出来,显示出的leibie顺序一定要按编号顺序由左到右从小到大排列
temp1表
bh      leibie  danwei  ypid    shuliang riqi   danhao        
010201 铁板0.8 NULL NULL .0000 NULL NULL
010202 铁板1.4 NULL NULL .0000 NULL NULL
010203 大边框 NULL NULL .0000 NULL NULL
010204 暗插销 NULL NULL .0000 NULL NULL
010205 粉末 NULL NULL .0000 NULL NULL
010206 合页 NULL NULL .0000 NULL NULL
010207 背板 NULL NULL .0000 NULL NULL
010208 防火锁 NULL NULL .0000 NULL NULL
010209 闭门器 NULL NULL .0000 NULL NULL
010210 管井锁 NULL NULL .0000 NULL NULL
010211 防盗锁 NULL NULL .0000 NULL NULL
010212 明插 NULL NULL .0000 NULL NULL
010213 轴合页 NULL NULL .0000 NULL NULL
010214 执手 NULL NULL .0000 NULL NULL
010215 门插 NULL NULL .0000 NULL NULL
010216 顺位器 NULL NULL .0000 NULL NULL
010217 珍珠岩板NULL NULL .0000 NULL NULL
010218 延绵条 NULL NULL .0000 NULL NULL
010219 防火胶 NULL NULL .0000 NULL NULL
010220 防火胶条NULL NULL .0000 NULL NULL
010221 胶水 NULL NULL .0000 NULL NULL declare @str varchar(4000)
set @str=''
select @str=@str+','+leibie+
'=sum(case when leibie='+QUOTENAME(leibie,'''')+' then shuliang else 0 end)'
from temp1
group by leibie
print @str
set @str='select danhao '+@str+' from temp1 group by danhao'
print @str
exec(@str)正常bianhao为null显示的应该也是这样的
bianhao   铁板0.8   铁板1.4   大边框    暗插销  ..   胶水

解决方案 »

  1.   


    GO
    IF OBJECT_ID('TBL')IS NOT NULL
    DROP TABLE TBL
    GO
    CREATE TABLE TBL(
    bh VARCHAR(6),
    leibie VARCHAR(10),
    danwei VARCHAR(4),
    ypid VARCHAR(5),
    shuliang INT,
    riqi DATETIME,
    danhao VARCHAR(5)
    )
    GO
    INSERT TBL(bh,leibie,shuliang)
    SELECT '010201','铁板0.8',0 UNION ALL
    SELECT '','铁板1.4',0 UNION ALL 
    SELECT '010203','大边框',0  UNION ALL
    SELECT '','暗插销',0  UNION ALL
    SELECT '010205','粉末',0    UNION ALL
    SELECT '010206','合页',0 
    DECLARE @STR VARCHAR(2000)
    SET @STR=''
    SELECT @STR=@STR+','+QUOTENAME(leibie,'[]')+'=MAX(CASE WHEN leibie='+QUOTENAME(leibie,'''')
           +' THEN shuliang ELSE 0 END)' FROM TBL
           GROUP BY leibie
    SET @STR='SELECT ISNULL(danhao,'''') AS bianhao'+@STR+' FROM TBL 
        GROUP BY danhao'
    PRINT @STR
    EXEC(@STR)
    /*
    bianhao 暗插销 大边框 粉末 合页 铁板0.8 铁板1.4
    0 0 0 0 0 0
    */
      

  2.   

    显示出的leibie顺序一定要按编号顺序由左到右从小到大排列----------
    如果不是按leibie来排序的话,在构造sql语句时,需增加一个编号的排序,在这里可以使用min(bh)来排序,如果有重复的,取第一个