让查询数据由行变成列

有这样两个数据表
(WuZi_Table)
物资编码(id), 颜色编号(Color_id), 数量(acount)
1111          1                   10
2222          2                   20
1111          1                   20
3333          3                   5
1111          3                   10
(YanSe_Table)
颜色编号(Color_id), 颜色名称(Color)
1                   
红色
2                   
兰色
3                   
绿色
...
颜色可能会增加

如何查询得到
物资编码   红色    兰色    绿色  ...
1111       30      0       10
2222       0       20      0
3333       0       0       5

--建表

create table WuZi_Table(
 id int,Color_id varchar(2) ,acount int)

create table YanSe_Table(
Color_id varchar(2), Color varchar(4))

INSERT INTO [WuZi_Table]([id],[Color_id],[acount])
     VALUES(1111,1,10)
INSERT INTO [WuZi_Table]([id],[Color_id],[acount])
     VALUES(2222,2,20)
INSERT INTO [WuZi_Table]([id],[Color_id],[acount])
     VALUES(1111,1,20)
INSERT INTO [WuZi_Table]([id],[Color_id],[acount])
     VALUES(3333,3,15)
INSERT INTO [WuZi_Table]([id],[Color_id],[acount])
     VALUES(1111,3,10)


INSERT INTO [YanSe_Table]([Color_id],[Color])
     VALUES(1,'红色')
INSERT INTO [YanSe_Table]([Color_id],[Color])
     VALUES(2,'兰色')
INSERT INTO [YanSe_Table]([Color_id],[Color])
     VALUES(3,'蓝色')

--如果数据不多的话可以用下面的语句

SELECT ID,sum(CASE WHEN Color='红色' THEN aCount ELSE 0 END) AS 红色,  
           SUM(CASE WHEN Color='兰色' THEN aCount ELSE 0 END) AS 兰色,  
           SUM(CASE WHEN Color='绿色' THEN aCount ELSE 0 END) AS 绿色      
 from  WuZi_Table w ,YanSe_Table y where w.color_id=y.color_id  
 GROUP BY ID
GO
=====================================
--如果数据是动态生成的可用下面语句

declare @s varchar(8000)
set @s=''
select @s=@s+',['+color+']=sum(case color_id when '+color_id +' then acount else 0 end) '+char(10) from yanse_table
exec ('select distinct id '+@s+' from wuzi_table group by id')

--print @s



================

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值