编写高级SQL选择
项目表:编写高级SQL选择,sql,sql-server,tsql,pivot,Sql,Sql Server,Tsql,Pivot,项目表: | Item | Qnty | ProdSched | | a | 1 | 1 | | b | 2 | 1 | | c | 3 | 1 | | a | 4 | 2 | | b | 5 | 2
| Item | Qnty | ProdSched |
| a | 1 | 1 |
| b | 2 | 1 |
| c | 3 | 1 |
| a | 4 | 2 |
| b | 5 | 2 |
| c | 6 | 2 |
有没有一种方法可以使用SQLSELECT
像这样输出它
| Item | ProdSched(1)(Qnty) | ProdSched(2)(Qnty) |
| a | 1 | 4 |
| b | 2 | 5 |
| c | 3 | 6 |
你可以用这个。如果要转换的值数量已知,则可以通过静态轴硬编码这些值:
select item, [1] as ProdSched_1, [2] as ProdSched_2
from
(
select item, qty, prodsched
from yourtable
) x
pivot
(
max(qty)
for prodsched in ([1], [2])
) p
看
如果列数未知,则可以使用动态轴:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(prodsched)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT item,' + @cols + ' from
(
select item, qty, prodsched
from yourtable
) x
pivot
(
max(qty)
for prodsched in (' + @cols + ')
) p '
execute(@query)
请参见让我们分两个阶段进行讨论。首先,尽管这不是您想要的确切格式,但您可以按如下方式获得所需的数据:
Select item, ProdSched, max(qty)
from Item1
group by item,ProdSched
Select item, [1] as ProdSched1, [2] as ProdSched2
from ( Select Item, Qty, ProdSched
from item1 ) x
Pivot ( Max(qty) for ProdSched in ([1],[2])) y
现在,要获得所需格式的数据,一种实现方法是透视表。您可以按如下方式在SQL Server中创建透视表:
Select item, ProdSched, max(qty)
from Item1
group by item,ProdSched
Select item, [1] as ProdSched1, [2] as ProdSched2
from ( Select Item, Qty, ProdSched
from item1 ) x
Pivot ( Max(qty) for ProdSched in ([1],[2])) y
请学习使用Shift键。输入所有大写字母都被认为是大声叫喊(而且是粗鲁的)。用小写字母打字会使事情更难阅读。他们发明换档键是有原因的。谢谢。可能是重复的击败我到非枢轴version@bluefeet不知怎的,我就知道你会在几分钟内推出pivot版本+1当然可以。