簡體   English   中英

避免 IIF 語句中的重復

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

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