簡體   English   中英

在此查詢中何處放置CASE WHEN列IS NULL

[英]where to place CASE WHEN column IS NULL in this query

我在將MS Access查詢轉換為SQL時遇到了一些問題:

SELECT id, col1, col2, col3
FROM table1

LEFT OUTER JOIN table2
ON table1.id = table2.id

LEFT OUTER JOIN table3
ON table1.id = table3.id

到目前為止一切都那么好,但這里是(CASE)部分,我卡住了:

CASE WHEN table3.col3 IS NULL THEN table2.col3 AS col4 ELSE table3.col3 as col4

我知道上面這行不起作用,但希望它能暗示我正在努力實現的目標。 謝謝!

更新:到目前為止的所有建議都導致“關鍵字'AS'附近的語法不正確”錯誤,所以可能還有其他我缺少的東西。 下面是實際查詢。 問題是我們有兩個表,都有和EUID列。 如果dbo.EU_Admin3.EUID不為NULL,則它在連接中優先。 如果dbo.EU_Admin3.EUID為NULL,請改用dbo.EU_Admin2.EUID。 希望澄清一下。

SELECT dbo.AdminID.CountryID, dbo.AdminID.CountryName, dbo.AdminID.RegionID, 
dbo.AdminID.[Region name], dbo.AdminID.DistrictID, dbo.AdminID.DistrictName,
dbo.AdminID.ADMIN3_ID, dbo.AdminID.ADMIN3 
(CASE WHEN dbo.EU_Admin3.EUID IS NULL THEN dbo.EU_Admin2.EUID ELSE dbo.EU_Admin3.EUID END AS EUID)
FROM dbo.AdminID 

LEFT OUTER JOIN dbo.EU_Admin2
ON dbo.AdminID.DistrictID = dbo.EU_Admin2.DistrictID

LEFT OUTER JOIN dbo.EU_Admin3
ON dbo.AdminID.ADMIN3_ID = dbo.EU_Admin3.ADMIN3_ID

試試這個:

CASE WHEN table3.col3 IS NULL THEN table2.col3 ELSE table3.col3 END as col4

as col4應該在CASE結尾處聲明。 另請注意,您也錯過了END

另一個可能更簡單的選擇是:

IIf([table3.col3] Is Null,[table2.col3],[table3.col3])

只是為了澄清,MS Access不支持COALESCE。 如果那將是最好的方式。

根本問題變更后編輯:

要將查詢轉換為SQL Server,您可以使用COALESCE(因此在技術上也可以回答):

SELECT dbo.AdminID.CountryID, dbo.AdminID.CountryName, dbo.AdminID.RegionID, 
dbo.AdminID.[Region name], dbo.AdminID.DistrictID, dbo.AdminID.DistrictName,
dbo.AdminID.ADMIN3_ID, dbo.AdminID.ADMIN3,
COALESCE(dbo.EU_Admin3.EUID, dbo.EU_Admin2.EUID)
FROM dbo.AdminID

順便說一句,你的CASE語句缺少,前場。 這就是為什么它不起作用。

看起來它可能屬於select語句:

SELECT id, col1, col2, col3, (CASE WHEN table3.col3 IS NULL THEN table2.col3 AS col4 ELSE table3.col3 as col4 END)
FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.id
LEFT OUTER JOIN table3
ON table1.id = table3.id

無法理解您的實際問題,但您的案例陳述不正確

CASE 
WHEN 
TABLE3.COL3 IS NULL
THEN TABLE2.COL3
ELSE
TABLE3.COL3
END 
AS
COL4

感謝你的幫助! @Svetoslav Tsolov非常接近,但我仍然得到一個錯誤,直到我發現右括號在錯誤的地方。 這是最終的查詢:

SELECT dbo.AdminID.CountryID, dbo.AdminID.CountryName, dbo.AdminID.RegionID, 
dbo.AdminID.[Region name], dbo.AdminID.DistrictID, dbo.AdminID.DistrictName,
dbo.AdminID.ADMIN3_ID, dbo.AdminID.ADMIN3,
(CASE WHEN dbo.EU_Admin3.EUID IS NULL THEN dbo.EU_Admin2.EUID ELSE dbo.EU_Admin3.EUID END) AS EUID
FROM dbo.AdminID 

LEFT OUTER JOIN dbo.EU_Admin2
ON dbo.AdminID.DistrictID = dbo.EU_Admin2.DistrictID

LEFT OUTER JOIN dbo.EU_Admin3
ON dbo.AdminID.ADMIN3_ID = dbo.EU_Admin3.ADMIN3_ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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