[英]Teradata SQL - case when and logic to show milestones
我有一個包含三列的表,並希望使用以下邏輯創建“里程碑”列。 注意,MILESTONE是理想的結果。
規則是-對於類型A的“ DAYS TO GO”狀態=> 14,為“ TRACK”-對於類型B的“狀態:DAYS TO GO'> = 30,狀態為READY”
STATUS DAYS TO GO TYPE MILESTONE
READY 13 A ON TRACK
OPEN 15 A ON TRACK
READY 15 A ON TRACK
OPEN 13 A LATE
READY 28 B ON TRACK
OPEN 31 B ON TRACK
OPEN 29 B LATE
OPEN 33 B ON TRACK
我的問題是CASE WHEN如果未正確接起,則大於30,並且為READY。
CASE
WHEN TYPE = 'A' AND STATUS = 'READY' AND DAYS TO GO >= 14 THEN 'ON TRACK'
WHEN TYPE = 'B' AND STATUS = 'READY' AND DAYS TO GO >= 30 THEN 'ON TRACK
ELSE 'LATE' END
我想感謝@Tim Biegeleisen我能夠回答我自己的問題。 看來我需要將所有規則都包含在CASE WHEN中。
所以我的數據是(我遷移到了mySQL,因為這是最簡單的操作)
CREATE TABLE tableA
(
STATUS VARCHAR (5),
DAYS int (2),
TYPE VARCHAR (2)) ;
insert into tableA values
("READY",13,"A"),
("OPEN",15,"A"),
("READY",15,"A"),
("OPEN",13,"A"),
("READY",28,"B"),
("OPEN",31,"B"),
("OPEN",29,"B"),
("OPEN",33,"B");
我的選擇是:
SELECT t.STATUS,t.DAYS,t.TYPE,
CASE
WHEN (t.TYPE = "A" AND t.DAYS >= 14 AND t.STATUS = "READY") THEN "ON TRACK"
WHEN (t.TYPE = "A" AND t.DAYS <= 14 AND t.STATUS = "READY") THEN "ON TRACK"
WHEN (t.TYPE = "A" AND t.DAYS >= 14 AND t.STATUS <> "READY") THEN "ON TRACK"
WHEN (t.TYPE = "B" AND t.DAYS >= 30 AND t.STATUS = "READY") THEN "ON TRACK"
WHEN (t.TYPE = "B" AND t.DAYS <= 30 AND t.STATUS = "READY") THEN "ON TRACK"
WHEN (t.TYPE = "B" AND t.DAYS >= 30 AND t.STATUS <> "READY") THEN "ON TRACK"
ELSE "LATE" END AS "MILESTONE"
FROM tableA t;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.