Sql-Server

在單獨的計算欄位中使用計算欄位

  • March 11, 2019

我試圖避免僅為一個欄位創建臨時表,但我需要在單獨的計算欄位中使用計算欄位。例如:

,CASE WHEN ln.INT_RATE_CODE = 'A' THEN 1
    WHEN ln.INT_RATE_CODE = 'B' THEN 2
    WHEN ln.INT_RATE_CODE = 'C' THEN 3
       ELSE 0
        END AS RateReset

,CASE WHEN ln.TIME_RATE = 1 AND RateReset = 3 THEN 'Pass' 
     ELSE 'FAIL'
       END AS OGIntRate

如果您只需要破解它,您可以將第一個表達式嵌入到第二個中:

,CASE WHEN ln.INT_RATE_CODE = 'A' THEN 1
    WHEN ln.INT_RATE_CODE = 'B' THEN 2
    WHEN ln.INT_RATE_CODE = 'C' THEN 3
       ELSE 0
        END AS RateReset

,CASE WHEN ln.TIME_RATE = 1 
    AND (CASE WHEN ln.INT_RATE_CODE = 'A' THEN 1
    WHEN ln.INT_RATE_CODE = 'B' THEN 2
    WHEN ln.INT_RATE_CODE = 'C' THEN 3
    ELSE 0 END) = 3 THEN 'Pass' 
     ELSE 'FAIL'
       END AS OGIntRate

儘管基於這個非常有限的查詢摘錄,您應該能夠檢查INT_RATE_CODE = 'C'

,CASE WHEN ln.TIME_RATE = 1 AND ln.INT_RATE_CODE = 'C' THEN 'Pass' 
     ELSE 'FAIL'
       END AS OGIntRate

如果您能夠更改表定義,則可以為第一個CASE表達式添加一個計算列,然後在另一個CASE表達式中直接引用它。像這樣:

ALTER TABLE YourTableName
ADD COLUMN RateReset AS CASE WHEN ln.INT_RATE_CODE = 'A' THEN 1 WHEN ln.INT_RATE_CODE = 'B' THEN 2 WHEN ln.INT_RATE_CODE = 'C' THEN 3 ELSE 0 END;

然後OGIntRate可以直接基於RateReset您在原始程式碼中的內容。

引用自:https://dba.stackexchange.com/questions/231675