【发布时间】:2018-06-04 08:36:22
【问题描述】:
我在下面有一个稍微复杂的查询:
with t as (
select a.ID, a.Date_Reported AS [Date Sent], b.Date_Received AS [Date Returned],
(datediff(dd, a.date_reported, b.date_received)
+ CASE WHEN Datepart(dw, b.date_received) = 7 THEN 1 ELSE 0 END
- (Datediff(wk, a.date_reported, b.date_received) * 2 )
- CASE WHEN Datepart(dw, b.date_received) = 1 THEN 1 ELSE 0 END +
- CASE WHEN Datepart(dw, b.date_received) = 1 THEN 1 ELSE 0
END) AS [Time_Spent]
from TX_ext a
join TX b on b.id on a.id
)
select
sum(case when Time_Spent between 0 and 3 then 1 else 0 end) as _0_3_days,
sum(case when Time_Spent = 4 then 1 else 0 end) as _4_days,
sum(case when Time_Spent = 5 then 1 else 0 end) as _5_days,
sum(case when Time_Spent between 6 and 8 then 1 else 0 end) as _6_8_days,
sum(case when Time_Spent >= 9 then 1 else 0 end) as more_than_9_days,
avg(case when Time_Spent between 0 and 3 then 100.0 else 0 end) as _0_3_percent,
avg(case when Time_Spent = 4 then 100.0 else 0 end) as _4_percent,
avg(case when Time_Spent = 5 then 100.0 else 0 end) as _5_percent,
avg(case when Time_Spent between 6 and 8 then 100.0 else 0 end) as _6_8_percent,
avg(case when Time_Spent >= 9 then 100.0 else 0 end) as more_than_9_day_percent
from t
上面的查询给了我下表:
0-3 | 4 | 5 | 6-8 | 9+ | 0-3% | 4% | 5% | 6-8% | 9+%
2 | 3 | 1 | 3 | 1 | 20 | 30 | 10 | 30 | 10
但我最理想的是这样(将 % 数字转换为一行)并且标题作为第一列:
Time Taken (days) | 0-3 | 4 | 5 | 6-8 | 9+
Count | 2 | 3 | 1 | 3 | 1
% | 20 | 30| 10| 30 | 10
有什么想法吗?提前致谢
【问题讨论】:
-
您必须使用 2 个查询的联合 - 一个用于求和,另一个用于平均
-
我建议在您的表示层中进行。
标签: sql-server transpose