SELECT 查询中的 IF-ELSE
IF-ELSE inside of a SELECT Query
这是我正在尝试做的事情:
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
从上面的代码中,您可以看出我正在尝试做的事情。我只想从两个不同的表中获取 select,具体取决于 TBL2.ID 是 'X' 还是 'Rm' 或 'St' 等。如果我能让这个工作我可以担心稍后再讨论其他值。
我尝试过的(只是 post 我遇到问题的 () 之间的部分):
(
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'.
附近的语法不正确
问题:如何在另一个select查询中编写if-else语句/case语句?
case statement
会 return 一个 scalar value
你不能写一个 select
inside case 语句。将您的 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
只需引用 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
如果 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
这是我正在尝试做的事情:
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
从上面的代码中,您可以看出我正在尝试做的事情。我只想从两个不同的表中获取 select,具体取决于 TBL2.ID 是 'X' 还是 'Rm' 或 'St' 等。如果我能让这个工作我可以担心稍后再讨论其他值。
我尝试过的(只是 post 我遇到问题的 () 之间的部分):
(
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'.
附近的语法不正确问题:如何在另一个select查询中编写if-else语句/case语句?
case statement
会 return 一个 scalar value
你不能写一个 select
inside case 语句。将您的 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
只需引用 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
如果 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