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.AddrTBL4.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

参见:COALESCE (Transact-SQL)