2014-10-28 25 views
0

此查詢用於打印JOINED表,其中creditcard列顯示每個行 的「現金」,其中沒有卡名稱。SQL中的JOIN查詢中的CASE語句

我寫了下面,但它會導致錯誤:

SELECT st.Name Territoryname,pp.LastName SalesPerson,ps.Name ShipMethod, 
     sc.CardType CreditCardType, 
     soh.OrderDate,soh.TotalDue 
FROM Sales.SalesOrderHeader soh 
JOIN Person.Person pp 
ON  soh.SalesPersonID=pp.BusinessEntityID 
JOIN Purchasing.ShipMethod ps 
ON  ps.ShipMethodID=soh.ShipMethodID 
JOIN Sales.CreditCard sc (CASE WHEN sc.CardType='Distinguish' THEN 'Cash' ELSE sc.CardType  END), 
ON  sc.CreditCardID=soh.CreditCardID 
JOIN Sales.SalesTerritory st 
ON  st.TerritoryID=soh.TerritoryID 
+0

什麼是錯誤? – showdev 2014-10-28 22:24:59

+0

這取決於我在哪裏陳述。在這種情況下,錯誤是「關鍵字'CASE'附近的語法錯誤」 – PureData1 2014-10-28 22:25:41

+0

上述代碼中的語法現在是正確的,它不會引發任何錯誤。 – 2014-10-28 22:30:23

回答

1

這是什麼也許你想嗎?

SELECT 
     st.Name Territoryname, 
     pp.LastName SalesPerson, 
     ps.Name ShipMethod, 
     CASE WHEN sc.CardType='Distinguish' THEN 'Cash' ELSE sc.CardType END AS CreditCardType, 
     soh.OrderDate, 
     soh.TotalDue 
FROM Sales.SalesOrderHeader soh 
JOIN Person.Person pp 
ON  soh.SalesPersonID=pp.BusinessEntityID 
JOIN Purchasing.ShipMethod ps 
ON  ps.ShipMethodID=soh.ShipMethodID 
JOIN Sales.CreditCard sc 
ON  sc.CreditCardID=soh.CreditCardID 
JOIN Sales.SalesTerritory st 
ON  st.TerritoryID=soh.TerritoryID 

這將顯示cash其中CardType是Distinguish。也許這應該是:

CASE WHEN sc.CardType IS NULL THEN 'Cash' ELSE sc.CardType END AS CreditCardType 

,如果你想顯示cash凡卡類型缺失(儘管我不認爲這會發生,你正在使用內部連接,並沒有離開聯接)。

+0

比你JPW。我喜歡你的風格(直截了當)。這正是我打算實現的目標。你搖滾! – PureData1 2014-10-28 22:47:26

+0

@ PureData1噢,謝謝(臉紅);) – jpw 2014-10-28 22:47:50

0

你不需要在連接的情況。而不是把情況僅在選擇:

SELECT ..., 
    CASE WHEN CardType = '' THEN 'Cash' ELSE CardType END AS CardType, 
    ... 

此外,如果一些連接表的不會有現金支付的情況下,相應的行,你需要使用LEFT JOIN小號

+0

謝謝Zdravko :) – PureData1 2014-10-28 22:48:39

0

您的CASE語句錯誤。你想讓它在SELECT部分​​

select st.name Territoryname, pp.LastName SalesPerson, ps.Name ShipMethod, soh.OrderDate, soh.TotalDue, 
CASE sc.CardType 
WHEN null THEN 'Cash' 
ELSE sc.CardType 
END 
FROM Sales.SalesOrderHeader soh 
JOIN Person.Person pp ON soh.SalesPersonID=pp.BusinessEntityID 
JOIN Purchasing.ShipMethod ps ON ps.ShipMethodID=soh.ShipMethodID 
JOIN Sales.CreditCard sc ON sc.CreditCardID=soh.CreditCardID 
JOIN Sales.SalesTerritory st ON st.TerritoryID=soh.TerritoryID 

你還別說,這應該說是「現金」時CardType是空的,所以請注意我是在select語句改爲當「空」,而不是當「區分」

+1

'CASE sc.CardType WHEN null ...'永遠不會工作,因爲它相當於'CASE WHEN sc.CardType = null ...',你可能知道你應該使用'x IS NULL'而不是'x = NULL'來測試NULL。因此,使用其他CASE語法:'CASE WHEN sc.CardType IS null ...'。 – 2014-10-28 22:48:52