【发布时间】:2023-04-08 02:17:01
【问题描述】:
我有一个表,我在其中运行一个 select 语句并返回以下数据
Name date skill seconds calls
----------------------------------------------
bob 9/2/2016 706 12771 56
bob 9/2/2016 707 4061 16
bob 9/2/2016 708 2577 15
bob 9/2/2016 709 2156 6
我想返回如下一行数据:
Name date 706sec 706call 707sec 707call 708sec 708call 709sec 709call
----------------------------------------------------------------------------------
bob 9/2/2016 12771 56 4061 16 2577 15 2156 6
我的第一次尝试是枢轴,但没有返回单行:
Select
name, date, seconds, calls, [706], [707],[708],[709],
from
(Select
name, date, skill, seconds, calls
From
tablecalls
Where
date between '09/02/2016 00:00' and '09/02/2016 23:59'
and name = 'bob') as b
pivot
(sum(seconds) for skill in ([706], [707], [708], [709] )) as p1
这会返回:
name date calls 706sec 707sec 708sec 709sec
---------------------------------------------------------
bob 9/2/2016 6 NULL NULL NULL 2156
bob 9/2/2016 15 NULL NULL 2577 NULL
bob 9/2/2016 16 NULL 4061 NULL NULL
bob 9/2/2016 56 12771 NULL NULL NULL
也许PIVOT 不是这样做的正确方法。还有其他方法吗?
【问题讨论】:
-
好吧,您可以使用 pivot,但它最终可能会比仅使用条件聚合效率低。例如
select name, date, max(case when skill = 706 then seconds end) [706sec], max(case when skill = 706 then calls end) [706call], max(case when skill = 707 then seconds end) [707sec]... from mytable group by name, date. -
我试过 ZLK 的建议很有效。
标签: sql-server select pivot