簡體   English   中英

Teradata SQL-顯示里程碑的時間和邏輯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM