==sql语句行列转换问题==

ChinaOneCup 2015-10-29 03:28:08
有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

由于物品名称是动态生成的,不知道怎么生成动态列


...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Landa_Tiny_cui 2015-10-29
  • 打赏
  • 举报
回复
CREATE TABLE tb ( 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') go DECLARE @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)
Tiger_Zhao 2015-10-29
  • 打赏
  • 举报
回复
行列转换
很相似的,差别就是你在拼 @columns 的时候要对 pn 先进行 DISTINCT。
迷糊丶 2015-10-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/vipxiaotian/article/details/4409423 这里有详细论述动态行转列 以及案例。

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧