我有一個帶有多個任務的表,其中包含時間和名稱資訊。
我有這個資料:
| ID | 挑選 | 降低 | 日期 |
|---|---|---|---|
| 任務 1 | 一種 | 1 | 12/11/2021-09:32 |
| 任務 2 | 乙 | 1 | 12/11/2021-12:32 |
| 任務 3 | D | 2 | 12/11/2021-10:32 |
| 任務 4 | 一種 | 5 | 12/11/2021-19:32 |
我想做的是創建一個表來按流分組,在我們的示例中,我們的流是:
- 流程 1:所有從 A 和 D 中挑選
- 流程2:所有從B和C中挑選
所有這些都使用日期分組在 3 列中。使用我們的示例,它將如下所示:
| 流動 | 早晨 | 下午 | 夜晚 | 全部的 |
|---|---|---|---|---|
| 流程 1 | 2 | 1 | 0 | 3 |
| 流程 2 | 0 | 1 | 0 | 1 |
這是我在看的:
第一次選擇:關聯選擇 A 和 B 的第一行
select *
from table mission
where pick = A or pick = D
as the flow1
select count(*)
from flow1
where date.hour < 11:01 -- this information as to be stored on the column morning
有沒有辦法使用 SQL Server 獲得這個結果?
謝謝你的幫助 。
uj5u.com熱心網友回復:
以下“排序”給出了您想要的結果 - 我不清楚您的時間分類,但您可以酌情修改這些。
使用Apply,以計算所需的中間結果(保存條件重復或需要一個子查詢/ CTE):
select Flow, Sum(Morning) Morning, Sum(PM) PM, Sum(Night) Night, Count(*) Total
from t
cross apply (values (Iif(pick in ('A','D'),'Flow 1','Flow 2')))f(Flow)
cross apply (values ( Convert(time, [DATE] )))v(T)
cross apply (
select
case when T >='06:00:00' and T < '11:00:00' then 1 else 0 end Morning,
case when T >='11:00:00' and T < '22:00:00' then 1 else 0 end PM,
case when T >='22:00:00' and T < '06:00:00' then 1 else 0 end Night
)c
group by Flow
見演示小提琴
uj5u.com熱心網友回復:
您可以使用 SELECT CASE([PICK] = 'A' OR [PICK] = 'C', "FLOW 1", "FLOW 2") AS FLOW 然后按 FLOW 分組
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371166.html
標籤:sql sql-server 数据库 查询语句
