有A表,表结构如下
id:自增字段
rq:插入日期
pn:物品名称 (总共50种左右)
je:销售金额id rq pn je
1 2015-06-01 物品1 10
2 2015-06-01 物品2 20
3 2015-06-01 物品3 15
4 2015-06-02 物品4 30
5 2015-06-02 物品1 10
........
想要这样的查询结果:
rq 物品1 物品2 物品3 物品4
2015-06-01 10 20 15
2015-06-02 10 30由于物品名称是动态生成的,不知道怎么生成动态列
id:自增字段
rq:插入日期
pn:物品名称 (总共50种左右)
je:销售金额id rq pn je
1 2015-06-01 物品1 10
2 2015-06-01 物品2 20
3 2015-06-01 物品3 15
4 2015-06-02 物品4 30
5 2015-06-02 物品1 10
........
想要这样的查询结果:
rq 物品1 物品2 物品3 物品4
2015-06-01 10 20 15
2015-06-02 10 30由于物品名称是动态生成的,不知道怎么生成动态列
很相似的,差别就是你在拼 @columns 的时候要对 pn 先进行 DISTINCT。
(
id INT,
rq VARCHAR(50),
pn VARCHAR(50),
je VARCHAR(50)
)
INSERT INTO tb
(
id,
rq,
pn,
je
)
VALUES
(1,'2015-06-01','物品1','10'),(2,'2015-06-01','物品2','20'),
(3,'2015-06-01','物品3','15'),(4,'2015-06-02','物品4','30'),
(5,'2015-06-02','物品1','10')
goDECLARE @SQL VARCHAR(5000)
SET @SQL='SELECT RQ'
SELECT @SQL=@SQL+
','+'
SUM(CASE WHEN PN='+QUOTENAME(PN,'''')+ ' THEN CONVERT(INT,JE) END) AS ' +QUOTENAME(PN,'''')+'
'
FROM tb
GROUP BY PN
--PRINT (@SQL)
SET @SQL=@SQL+' FROM TB GROUP BY RQ'
EXEC (@SQL) RQ 物品1 物品2 物品3 物品4
-------------------------------------------------- ----------- ----------- ----------- -----------
2015-06-01 10 20 15 NULL
2015-06-02 10 NULL NULL 30
Warning: Null value is eliminated by an aggregate or other SET operation.(2 row(s) affected)