SQL行转列的问题(应该是这样说吧?)
如图所示:源数据如上面的,
目标像下面的(列数据为零的忽略)。
不知这样叫不叫行转列呢?
谢谢。
[解决办法]
[解决办法]
- SQL code
select 编码 , 颜色 , 数量 = s , 尺码 = 'S' from tb where s <> 0union allselect 编码 , 颜色 , 数量 = m , 尺码 = 'M' from tb where m <> 0union allselect 编码 , 颜色 , 数量 = l , 尺码 = 'L' from tb where l <> 0union allselect 编码 , 颜色 , 数量 = xl , 尺码 = 'XL' from tb where xl <> 0union allselect 编码 , 颜色 , 数量 = xxl , 尺码 = 'XXL' from tb where xxl <> 0union allselect 编码 , 颜色 , 数量 = xxxl , 尺码 = 'XXXL' from tb where xxxl <> 0union allselect 编码 , 颜色 , 数量 = xxxxl , 尺码 = 'XXXXL' from tb where xxxxl <> 0
[解决办法]
- SQL code
GOIF OBJECT_ID('TBL')IS NOT NULLDROP TABLE TBLGOCREATE TABLE TBL(编码 VARCHAR(10),名称 VARCHAR(10),颜色 VARCHAR(10),S INT ,M INT ,L INT,XL INT ,XXL INT )GOINSERT TBLSELECT '100000','牛仔裤','蓝色',1,1,1,1,0 UNION ALLSELECT '100001','衬衣','白色',1,0,0,0,1select * from tblSELECT * FROM(select * from tbl unpivot ([数量] for [尺码] in([S],[M],[L],[XL],[XXL]))b)AWHERE [数量]<>0/*编码 名称 颜色 数量 尺码100000 牛仔裤 蓝色 1 S100000 牛仔裤 蓝色 1 M100000 牛仔裤 蓝色 1 L100000 牛仔裤 蓝色 1 XL100001 衬衣 白色 1 S100001 衬衣 白色 1 XXL*/--2005以上版本使用unpivot很简单
[解决办法]
select 编码,名称,颜色,sum(数量),尺码 from t1 where s is not null
UNION all
select 编码,名称,颜色,sum(数量),尺码 from t1 where m is not null
UNION all
select 编码,名称,颜色,sum(数量),尺码 from t1 where l is not null
UNION all
select 编码,名称,颜色,sum(数量),尺码 from t1 where xl is not null
UNION all
select 编码,名称,颜色,sum(数量),尺码 from t1 where xxl is not null
UNION all
select 编码,名称,颜色,sum(数量),尺码 from t1 where xxxl is not null
UNION all
select 编码,名称,颜色,sum(数量),尺码 from t1 where xxxxl is not null
[解决办法]
如果你的数据库是2005及以上版本 试试这个
- SQL code
select 编码, 名称, 颜色, 数量, 尺码from tb unpivot(数量 for 尺码 in([S],[M],[L],[XL],[XXL],[XXXL],[XXXXL])) pwhere 数量 > 0
[解决办法]
如果你的数据库是2005及以上版本 试试这个 比较简洁
- SQL code
select 编码, 名称, 颜色, 数量, 尺码from tb unpivot(数量 for 尺码 in([S],[M],[L],[XL],[XXL],[XXXL],[XXXXL])) pwhere 数量 > 0