[英]SQL Query Combine Multiple Results
我試圖運行一個SQL查詢以在1行而不是不同的行上顯示日期,我還需要確定每個顯示的日期之間的天數。
請在當前查詢下面找到。
SELECT "Pat_Name",
CASE WHEN "vw_Schedule"."Activity" = '123'
THEN "vw_Schedule"."App_DtTm"
ELSE NULL
END as Consult,
CASE WHEN "vw_Schedule"."Activity" = '456'
THEN "vw_Schedule"."App_DtTm"
ELSE NULL
END as SIM,
CASE WHEN "vw_Schedule"."Activity" = '789'
THEN "vw_Schedule"."App_DtTm"
ELSE NULL
END as PLANNING,
CASE WHEN "vw_Schedule"."SysDefStatus" = 'SC'
THEN "vw_Schedule"."App_DtTm"
ELSE NULL
END as TreatmentStart,
CASE WHEN "vw_Schedule"."SysDefStatus" = 'FC'
THEN "vw_Schedule"."App_DtTm"
ELSE NULL
END as TreatmentFinished
FROM "vw_Schedule"
WHERE "vw_Schedule"."Activity"='123'
or "vw_Schedule"."Activity"='456'
or "vw_Schedule"."Activity"='789'
or "vw_Schedule"."SysDefStatus"='SC'
or "vw_Schedule"."SysDefStatus"='FC'
我希望輸出與下面類似
Pat_Name | Consult | Days | SIM | Days | PLANNING | Days | TreatmentStart | Days | TreatmentFinish
Test Pat | 1/9/2013 | 4 | 5/9/2013 | 10 | 15/9/2013 | 3 | 18/9/2013 | 7 | 25/9/2013
謝謝你的幫助。
如果可以保證每個pat_Name的每個活動只有一行,則可以安全地使用聚合函數為每個pat_name的每個活動獲取App_dtTm,而不必擔心丟失數據。 如果沒有重復項,則使用MIN還是MAX也無關緊要。
SELECT s.Pat_Name,
Consult = MAX(CASE WHEN s.Activity = '123' THEN s.App_DtTm END),
SIM = MAX(CASE WHEN s.Activity = '456' THEN s.App_DtTm END),
PLANNING = MAX(CASE WHEN s.Activity = '789' THEN s.App_DtTm END),
TreatmentStart = MAX(CASE WHEN s.SysDefStatus = 'SC' THEN s.App_DtTm END),
TreatmentFinished = MAX(CASE WHEN s.SysDefStatus = 'FC' THEN s.App_DtTm END)
FROM vw_Schedule s
WHERE s.Activity IN ('123', '456', '789')
OR s.SysDefStatus IN ('SC', 'FC')
GROUP BY s.Pat_Name;
如果您一次活動可能有重復的日期,那么您使用的是MIN還是MAX都會有所不同。
為了獲得活動之間的間隔時間,您可以將上面的查詢移到一個通用的表表達式(或者您願意的話可以是子查詢),並簡單地引用您創建的列:
WITH T AS
( SELECT s.Pat_Name,
Consult = MAX(CASE WHEN s.Activity = '123' THEN s.App_DtTm END),
SIM = MAX(CASE WHEN s.Activity = '456' THEN s.App_DtTm END),
PLANNING = MAX(CASE WHEN s.Activity = '789' THEN s.App_DtTm END),
TreatmentStart = MAX(CASE WHEN s.SysDefStatus = 'SC' THEN s.App_DtTm END),
TreatmentFinished = MAX(CASE WHEN s.SysDefStatus = 'FC' THEN s.App_DtTm END)
FROM vw_Schedule s
WHERE s.Activity IN ('123', '456', '789')
OR s.SysDefStatus IN ('SC', 'FC')
GROUP BY s.Pat_Name
)
SELECT Pat_Name,
Consult,
Days = DATEDIFF(DAY, Consult, SIM),
SIM,
Days = DATEDIFF(DAY, SIM, PLANNING),
PLANNING,
Days = DATEDIFF(DAY, PLANNING, TreatmentStart),
TreatmentStart,
Days = DATEDIFF(DAY, TreatmentStart, TreatmentFinish),
TreatmentFinish
FROM T;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.