2013-11-04 49 views
0

好日子全部我是SQL的新手,並希望在SQL中執行以下操作。我在Crystal中完成了它,但不知道是否可以在SQl中完成。這是我如何做了它在水晶可以在SQL中完成:可以case語句如果然後其他和一個或子句

{@Adjust Code}{@Adjust Code WH}都進行了檢查空值,如果空把工作「空白」領域

能否下面的代碼2個變量放在在SELECT語句:

if {RV_CLAIM_DETAILS.NET} <> 0 
    then {RV_CLAIM_DETAILS.NET} 

    else if ({@Adjust Code} in ["#C", "A2", "24"] or 
      {@Adjust Code} = "23" and {@Adjust Code WH} = "24") 
      then {RV_CLAIM_DETAILS.CONTRVAL} 

問候, 大衛

+0

在哪選擇處理?其中實施?你有沒有嘗試過某些東西並且失敗/卡住 – geomagas

+0

case語句執行if/else邏輯。既然你已經足夠了解這個主題,那麼爲什麼不嘗試呢? –

+0

*** SQL ***只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......很多東西都是特定於供應商的 - 所以我們真的需要知道什麼**數據庫系統**(和哪個版本)你正在使用(請更新標籤相應)... –

回答

1

簡單的CASE表達式:

CASE input_expression 
    WHEN when_expression THEN result_expression [ ...n ] 
    [ ELSE else_result_expression ] 
END 
Searched CASE expression: 
CASE 
    WHEN Boolean_expression THEN result_expression [ ...n ] 
    [ ELSE else_result_expression ] 
END 

例子:

SELECT ProductNumber, Category = 
     CASE ProductLine 
     WHEN 'R' THEN 'Road' 
     WHEN 'M' THEN 'Mountain' 
     WHEN 'T' THEN 'Touring' 
     WHEN 'S' THEN 'Other sale items' 
     ELSE 'Not for sale' 
     END, 
    Name 
FROM Production.Product 
ORDER BY ProductNumber; 
GO 
2

表示此邏輯的標準SQL的方法是使用一個case聲明:

(case when RV_CLAIM_DETAILS.NET <> 0 
     then RV_CLAIM_DETAILS.NET 
     when "@Adjust Code" in ('#C', 'A2', '24') or 
      "@Adjust Code" = '23' and "@Adjust Code WH" = '24' 
     then RV_CLAIM_DETAILS.CONTRVAL 
end) as myValue 

這有同樣的語義爲你的發言。如果第一個子句匹配,則返回該值。如果沒有匹配,則返回NULL

一些筆記。首先,SQL使用單引號(而不是雙引號)來分隔字符串。也就是說,一些數據庫引擎爲此支持雙引號。其次,除非他們被轉義,否則不允許以'@'開頭的列名。一種逃避名字的方法是使用雙引號。也就是說,一些數據庫引擎使用方括號或反引號來達到同樣的目的。我還刪除了大括號,而這些不需要SQL。

+0

謝謝戈登它完美的工作。我不確定這是否可以在SQL中完成。 – user2953363