sql - SQL Server 选择查询动态列输出
问题描述
我想在 SQL Server 2008 中完成以下任务
我有一个如下的文章表
| ArticleId | Description |
|-----------+-------------|
| 1 | Test |
|-----------+-------------|
还有这样的订单预测表。
| ArticleId | Week | Order | Amount |
|-----------+--------------+--------+
| 1 | 51 | 1 | 0 |
| 1 | 52 | 2 | 150 |
| 1 | 1 | 3 | 0 |
| 1 | 2 | 4 | 200 |
| 1 | 3 | 5 | 0 |
|-----------+------+-------+--------+
有没有办法创建查询,按列的顺序为预测表中的每条记录生成一order
列。如果可能的话,我该怎么做?
| ArticleId | Description | Week51 | Week52 | Week1 | Week2 | Week3 |
|-----------+-------------+-----------------+-------+-------+-------+
| 1 | Test | 0 | 150 | 0 | 200 | 0 |
|-----------+-------------+--------+--------+-------+-------+-------+
解决方案
如果 WEEK 编号和 Order 编号一致,那么维护列顺序是一件小事。
您可能会注意到我使用了#forecast 和#article,因为我不知道您的实际表名。
例子
Declare @SQL varchar(max) = '
Select *
From (
Select A.ArticleID
,D.Description
,B.*
From #forecast A
Join #article D on A.ArticleID=D.ArticleID
Cross Apply (values (''Week''+left(Week,4),Amount) ) B(Item,Value)
) A
Pivot (max([Value])
For [Item] in (' + Stuff((Select ','+QuoteName('Week'+left(Week,4))
From (Select Distinct top 100 [Order],Week From #forecast Order by [Order] ) A
For XML Path('')),1,1,'') + ') ) p'
Exec(@SQL);
--Print @SQL
退货
ArticleID Description Week51 Week52 Week1 Week2 Week3
1 Test 0 150 0 200 0
推荐阅读
- nearprotocol - 块中的事务优先级
- python - Python,TK:在(可滚动)画布内的框架中,没有任何内容超出 y > 0x7fff
- c# - 这个关键字没有列出我在 asp web 应用程序中的变量和方法
- c# - 使用 Distinct 将 SQL 查询转换为 Linq (c#)
- excel - 在宏结束时返回第一个单元格
- python - 一个df的时间戳在另一个df的2个时间戳之间
- c# - 控制 UI 控件(标签、面板、按钮)并通过线程读取 UI 元素
- jenkins - 詹金斯管道卡住 - 等待下一个可用的执行者
- python - 如何最好地在熊猫数据框列上执行递归
- php - 将外键添加到迁移(Laravel)