【发布时间】:2026-02-10 06:25:02
【问题描述】:
我正面临一个问题,即我尝试使用名称创建列,但我有超过 20 个流,但我的请求只能在这里输入 10 个:
select Missions, Sum(Morning) Morning, Sum(PM) PM, Sum(Night) Night, count(*) Total
from [dbo].[VIEW_JOBS_FINISHED_ALL]
cross apply (values (Iif(QUELLE in ('Réception_14','Réception_21'),'M1',
Iif(QUELLE in ('Réception_17','Réception_16'),'M2',
Iif(QUELLE in ('Réception_13','Réception_19'),'M3',
Iif(QUELLE in ('Réception_15','Réception_25'),'M4',
Iif(QUELLE in ('Réception_15','Réception_25'),'M5',
Iif(QUELLE in ('Réception_15','Réception_25'),'M6',
Iif(QUELLE in ('Réception_15','Réception_25'),'M7',
Iif(QUELLE in ('Réception_15','Réception_25'),'M8',
Iif(QUELLE in ('Réception_15','Réception_25'),'M9',
Iif(QUELLE in ('Réception_15','Réception_25'),'M10',
Iif(QUELLE in ('Réception_15','Réception_25'),'M11','M28')))))))))))))f(Missions)
cross apply (values ( [START_DATE] ))v(T)
cross apply
(
values (convert(datetime, convert(date, getdate())),
convert(datetime, convert(date, getdate() - 1)))
) dates (today, yesterday)
cross apply
(
values (dateadd(hour, 6, yesterday),
dateadd(hour, 14, yesterday),
dateadd(hour, 21, yesterday),
dateadd(hour, 6, today))
) dt (y6, y11, y22, t6)
cross apply (
select
case when T >= y6 and T < y11 then 1 else 0 end Morning,
case when T >=y11 and T < y22 then 1 else 0 end PM,
case when T >=y22 and T < t6 then 1 else 0 end Night
)c
group by Missions
【问题讨论】:
-
我认为当......
-
请只标记您真正使用的RDBMS。
-
第三个
Iif之后所有的条件都一样,所以这些重复都没用。 -
我只是没有改变条件,但它会有所不同,这只是为了显示我在看什么
-
将值放入表值构造函数并加入其中,而不是使用
CASE或IIF
标签: sql-server tsql