[英]Avoiding duplicates in IIF statement
問題如下:
我有這張表 NUMBERS,其中有兩列數字:
+----------+----------+
| Number 1 | Number 2 |
+----------+----------+
| 12 | 3 |
| 20 | 7 |
| 17 | 5 |
+----------+----------+
基於此表,我執行 SQL SELECT 語句,我想顯示兩個數字的總和以及總和是否大於 20(必須顯示 Interim_Result 和 Result)
+----------+----------+----------------+----------+
| Number_1 | Number_2 | Interim_Result | Result |
+----------+----------+----------------+----------+
| 12 | 3 | 15 | under 20 |
| 20 | 7 | 27 | over 20 |
| 17 | 5 | 22 | over 20 |
+----------+----------+----------------+----------+
我會這樣寫一個 SQL 語句:
SELECT
Number_1,
Number_2,
Number_1 + Number_2 AS Interim_Result,
iif(Number_1 + Number_2 > 20, over 20, under 20) AS Result
FROM
NUMBERS
此語句有效,但我有重復的代碼Number_1 + Number_2
有沒有辦法可以避免iif
中的重復代碼,只需編寫:
SELECT
Number_1,
Number_2,
Number_1 + Number_2 AS Interim_Result,
iif(Interim_Result > 20, over 20, under 20) AS Result
FROM
NUMBERS
僅供參考,我正在使用 SQL 服務器
您通常可以使用 APPLY 運算符來縮短代碼並減少重復。
SELECT
Number_1,
Number_2,
I.Interim_Result AS Interim_Result,
iif(I.Interim_Result > 20, 'over 20', 'under 20') AS Result
FROM
NUMBERS AS N
CROSS APPLY (SELECT N.Number_1 + N.Number_2 AS Interim_Result) AS I
您可以使用子查詢來實現這一點,也可以使用CASE
而不是IIF
:
SELECT Number_1,
Number_2,
Interim_Result,
CASE
WHEN Interim_result > 20 THEN 'Over 20'
ELSE 'Under 20'
END AS Result
FROM (
SELECT Number_1,
Number_2,
Number_1 + Number_2 AS Interim_Result
FROM NUMBERS
) a
注意:代碼未經測試,但應該讓你走上正確的道路
編輯 CASE 的參考使用
正如@clem995 所指出的,您可以愉快地使用IIF
而不是CASE
:
SELECT Number_1,
Number_2,
Interim_Result,
IIF(Interim_result > 20, 'Over 20', 'Under 20') AS Result
FROM (
SELECT Number_1,
Number_2,
Number_1 + Number_2 AS Interim_Result
FROM NUMBERS
) a
我個人的偏好是使用CASE
,因為我發現它更易讀,並且它適用於多種 SQL 語言,但IIF
在這種情況下完全有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.