我有一個 SQL 表,其中保存了不同產品的 、ProductCode和價格。我想從此表創建一個視圖并創建一個條件列“狀態”,我需要根據產品的年齡來分配產品的狀態,并且我希望在每一行上保持該狀態相同。如何撰寫“案例”陳述句來創建“狀態”列?Start_DateEnd_date
如果 ProductCode 開始于 2019 年 - '舊',如果它開始于 2020 年 - '成熟',如果它開始于 2021 年 - '新'。

uj5u.com熱心網友回復:
如果我正確理解您的問題,您需要CASE運算式和 windowed的組合MIN():
SELECT
*,
CASE
WHEN MIN(Start_Date) OVER (PARTITION BY Product_Code) = 2019 THEN 'Old'
WHEN MIN(Start_Date) OVER (PARTITION BY Product_Code) = 2020 THEN 'Mature'
WHEN MIN(Start_Date) OVER (PARTITION BY Product_Code) = 2021 THEN 'New'
ELSE ''
END AS Status
FROM (VALUES
('abc10', 2019, 2020, 10),
('abc10', 2020, 2021, 11),
('abc10', 2021, 2025, 12),
('abc11', 2020, 2021, 10),
('abc11', 2021, 2025, 12),
('abc12', 2021, 2025, 15)
) t (Product_Code, Start_Date, End_Date, Price)
ORDER BY Product_Code, Start_Date
結果:
| 產品代碼 | 開始日期 | 結束日期 | 價錢 | 狀態 |
|---|---|---|---|---|
| abc10 | 2019 | 2020 | 10 | 老的 |
| abc10 | 2020 | 2021 | 11 | 老的 |
| abc10 | 2021 | 2025 | 12 | 老的 |
| abc11 | 2020 | 2021 | 10 | 成熟 |
| abc11 | 2021 | 2025 | 12 | 成熟 |
| abc12 | 2021 | 2025 | 15 | 新的 |
uj5u.com熱心網友回復:
編輯:更新加入。
SELECT
t.productcode
,Start_Date
,End_Date
,Price
,s.Status
FROM t1 as t
INNER JOIN (
SELECT
productcode
,CASE
WHEN MIN(Start_Date) = 2019 THEN 'Old'
WHEN MIN(Start_Date) = 2020 THEN 'Mature'
WHEN MIN(Start_Date) = 2021 THEN 'New'
ELSE 'Unknown'
END AS Status
FROM t1
group by productcode
) as s on t.productcode = s.productcode
一般來說,您不想硬編碼這些值,而是使用一些邏輯來確定舊的、成熟的和新的。隨著時間的推移,2021 年將變成成熟,然后是老,依此類推。有人需要記住維護它并更新年份。根據您的要求,根據DATEDIFF資料中的最大日期或當前日期使用會更可取。GETDATE()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/456551.html
上一篇:AzureBlobsvg下載
