日期:2014-05-18 浏览次数:20530 次
select 编码 , 颜色 , 数量 = s , 尺码 = 'S' from tb where s <> 0 union all select 编码 , 颜色 , 数量 = m , 尺码 = 'M' from tb where m <> 0 union all select 编码 , 颜色 , 数量 = l , 尺码 = 'L' from tb where l <> 0 union all select 编码 , 颜色 , 数量 = xl , 尺码 = 'XL' from tb where xl <> 0 union all select 编码 , 颜色 , 数量 = xxl , 尺码 = 'XXL' from tb where xxl <> 0 union all select 编码 , 颜色 , 数量 = xxxl , 尺码 = 'XXXL' from tb where xxxl <> 0 union all select 编码 , 颜色 , 数量 = xxxxl , 尺码 = 'XXXXL' from tb where xxxxl <> 0
------解决方案--------------------
GO IF OBJECT_ID('TBL')IS NOT NULL DROP TABLE TBL GO CREATE TABLE TBL( 编码 VARCHAR(10), 名称 VARCHAR(10), 颜色 VARCHAR(10), S INT , M INT , L INT, XL INT , XXL INT ) GO INSERT TBL SELECT '100000','牛仔裤','蓝色',1,1,1,1,0 UNION ALL SELECT '100001','衬衣','白色',1,0,0,0,1 select * from tbl SELECT * FROM( select * from tbl unpivot ([数量] for [尺码] in([S],[M],[L],[XL],[XXL]))b)A WHERE [数量]<>0 /* 编码 名称 颜色 数量 尺码 100000 牛仔裤 蓝色 1 S 100000 牛仔裤 蓝色 1 M 100000 牛仔裤 蓝色 1 L 100000 牛仔裤 蓝色 1 XL 100001 衬衣 白色 1 S 100001 衬衣 白色 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及以上版本 试试这个
select 编码, 名称, 颜色, 数量, 尺码 from tb unpivot(数量 for 尺码 in([S],[M],[L],[XL],[XXL],[XXXL],[XXXXL])) p where 数量 > 0
------解决方案--------------------
如果你的数据库是2005及以上版本 试试这个 比较简洁
select 编码, 名称, 颜色, 数量, 尺码 from tb unpivot(数量 for 尺码 in([S],[M],[L],[XL],[XXL],[XXXL],[XXXXL])) p where 数量 > 0