以下我需要你的帮助。请注意我使用的是SQL SERVER 2008。 我有一张桌子(下图),我们从“Pickup”到“Dropoff”完成了一些工作。 要求是(下面提到的输出格式)。 1)获取所有独特的邮政编码,无论它们是下降或拾取。这将给我们所有的邮政编码。 2)将从PICKUP完成的作业计数呈现给相应的DROPOFF。例如,我们从SE18邮政编码中挑选乘客两次,并将其带到SE18一次,SE19一次。它将从REQUIRED OUTPUT表中清除。
TABLE:
JobID Pickup Dropoff
====================================
1 SE18 SE18
2 SE18 SE19
3 SE2 SE18
4 SE28 SE2
5 AL1 SE7
6 BR1 SE10
7 NW1 TW16
8 AL1 SE18
9 BR6 AL1
10 E6 BR1
. . .
. . .
. . .
需求输出如下:
REQUIRED OUTPUT
SE18 SE2 SE28 AL1 BR1 NW1 BR6 E6 SE19 SE7 SE10 TW16 ..
=========================================================================
SE18 1 - - - - - - - 1 0 0 0
SE2 1 - - - - - - - - - - -
SE28 - 1 - - - - - - - - - -
AL1 1 - - - - - - - - 1 - -
BR1 - - - - - - - - - - 1 -
NW1 - - - - - - - - - - - 1
BR6 - - - 1 - - - - - - - -
E6 - - - - 1 - - - - - - -
SE19 - - - - - - - - - - - -
SE7 - - - - - - - - - - - -
SE10 - - - - - - - - - - - -
TW16 - - - - - - - - - - - -
.
.
.
非常感谢提前。 亲切的问候
答案 0 :(得分:3)
听起来这就是你要找的东西。如果要对值进行硬编码,则查询将如下所示:
select *
from
(
select pickup,
dropoff,
dropoff d
from yourtable
) x
pivot
(
count(d)
for dropoff in ([SE18], [SE2], [SE28], [Al1], [BR1],
[NW1], [BR6], [E6], [SE19], [SE7],
[SE10], [TW16])
) p
如果你有一个未知数量的值,那么你可以使用动态sql来pivot
值:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Dropoff)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT pickup, ' + @cols + ' from
(
select pickup, dropoff,
dropoff as countdropoff
from yourtable
) x
pivot
(
count(countdropoff)
for dropoff in (' + @cols + ')
) p '
execute(@query)