以下是我要做的事情:
SELECT
TBL1.Name,
TBL2.ID,
(
IF TBL2.ID = 'X'
SELECT TBL3.Addr
FROM TBL3
WHERE TBL3.ID = TBL2.ID
ELSE
SELECT TBL4.Room
FROM TBL4
WHERE TBL4.ID = TBL2.ID
)
AS Location
FROM TBL1
INNER JOIN TBL2
ON TBL1.ID = TBL2.ID
INNER JOIN TBL3
ON TBL2.ID = TBL3.ID
从上面的代码中你可以看到类似于我想要做的事情。我只想从两个不同的表中选择,具体取决于TBL2.ID是'X'还是'Rm'或'St'等。如果我能够正常工作,我可以稍后担心其他值。
我尝试了什么(只是发布我遇到问题的()之间的文章:
(
SELECT CASE
WHEN TBL2.ID = 'X'
THEN
SELECT TBL3.Addr FROM TBL3 WHERE TBL3.ID = TBL2.ID
ELSE
SELECT TBL4.Room FROM TBL4 WHERE TBL4.ID = TBL2.ID
END
) AS Location
这会产生错误: 无法绑定多部分标识符“TBL2.ID”。 “SELECT”附近的语法不正确。
问题:如何在另一个选择查询中编写if-else语句/ case语句?
答案 0 :(得分:2)
如果TBL3.Addr
或TBL4.Room
可用且另一个总是丢失,请考虑改为:
SELECT
TBL1.Name,
TBL2.ID,
COALESCE(TBL3.Addr, TBL4.Room) AS Location
FROM
TBL1
INNER JOIN TBL2
ON TBL1.ID = TBL2.ID
LEFT JOIN TBL3
ON TBL2.ID = TBL3.ID
LEFT JOIN TBL4
ON TBL2.ID = TBL4.ID
答案 1 :(得分:1)
case statement
将返回scalar value
您无法编写select
内部案例陈述。将您的TBL4
移至Join
请尝试此操作。
SELECT
TBL1.Name,
TBL2.ID,
case when TBL2.ID = 'X' then TBL3.Addr else TBL4.Room end AS Location
FROM TBL1
INNER JOIN TBL2
ON TBL1.ID = TBL2.ID
INNER JOIN TBL3
ON TBL2.ID = TBL3.ID
inner join TBL4 on TBL4.ID = TBL2.ID
答案 2 :(得分:1)
只需引用CASE
声明
SELECT
TBL1.Name,
TBL2.ID,
(
CASE WHEN TBL2.ID = 'X' THEN
TBL3.Addr
ELSE
TBL4.Room
END
)
AS Location
FROM TBL1
INNER JOIN TBL2 ON TBL1.ID = TBL2.ID
INNER JOIN TBL3 ON TBL2.ID = TBL3.ID
INNER/LEFT JOIN TBL4 ON TBL2.ID = TBL4.ID