在 SQL Server 中得出以下輸出的最佳方法是什么?
從下面的表 1 中查詢并得到類似表 2 的結果。
| 日期 | 時間 | 進出 |
|---|---|---|
| 2022 年 8 月 1 日 | 0800H | 在 |
| 2022 年 8 月 1 日 | 0802H | 在 |
| 2022 年 8 月 1 日 | 1700H | 出去 |
| 2022 年 8 月 2 日 | 0810H | 在 |
| 2022 年 8 月 2 日 | 1700H | 出去 |
| 2022 年 8 月 3 日 | 0800H | 在 |
| 2022 年 8 月 3 日 | 1700H | 出去 |
| 2022 年 8 月 3 日 | 1710H | 出去 |
后進先出規則
| 日期 | 在 | 出去 |
|---|---|---|
| 2022 年 8 月 1 日 | 0802H | 1700H |
| 2022 年 8 月 2 日 | 0810H | 1700H |
| 2022 年 8 月 3 日 | 0800H | 1700H |
如本圖所述
uj5u.com熱心網友回復:
CASE對于這個集合,可以使用一個簡單的陳述句將IN與OUT 分開:
SELECT [Date]
, MAX(CASE [IN/OUT] WHEN 'IN' THEN [Time] END) AS [IN]
, MIN(CASE [IN/OUT] WHEN 'OUT' THEN [Time] END) AS [OUT]
FROM Times
GROUP BY [Date]
ORDER BY [Date]
當條件變得更復雜時,我更喜歡使用 CTE 語法:
WITH TimeData as (
SELECT [Date],[Time],[IN/OUT]
, CASE [IN/OUT] WHEN 'IN' THEN [Time] END AS IN_TIME
, CASE [IN/OUT] WHEN 'OUT' THEN [Time] END AS OUT_TIME
FROM Times
)
SELECT [Date]
, MAX(IN_TIME) AS [IN]
, MIN(OUT_TIME) AS [OUT]
FROM TimeData
GROUP BY [Date]
ORDER BY [Date];
兩者都產生相同的結果集:(見http://sqlfiddle.com/#!18/52750/1)
| 日期 | 在 | 出去 |
|---|---|---|
| 2022-08-01 | 0802H | 1700H |
| 2022-08-02 | 0810H | 1700H |
| 2022-08-03 | 0800H | 1700H |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504676.html
標籤:sql tsql sql-server-2008 差距和岛屿
上一篇:在不同的選擇中按轉換日期排序

