是否可以在Case语句中执行Select语句

时间:2018-11-21 15:14:27

标签: sql teradata

这样可能吗?

SELECT WH_ACC_NO,
    CASE
        WHEN FIELD2 IN (SELECT * FROM TABLEB)
            THEN 'PASS'
        ELSE 'FAIL'
     END
FROM TABLEA

5 个答案:

答案 0 :(得分:1)

FIELD2应该与TABLEB映射,然后您可以执行以下操作:

SELECT ta.WH_ACC_NO,
       (CASE WHEN tb.FIELD2 IS NOT NULL
             THEN 'PASS'
             ELSE 'FAIL'
        END)
FROM TABLEA ta LEFT OUTER JOIN
     TABLEB tb
     ON tb.FIELD2 = ta.FIELD2; 

我已将FIELD2TABLEB一起使用,您可以使用正确的列名来更正ON子句。

答案 1 :(得分:1)

CASE中SELECT的语法在Teradata中有所限制,您需要编写相关标量子查询以避免CASE表达式的WHEN子句中的 3771非法表达式 >错误:

SELECT WH_ACC_NO,
    CASE -- when FieldWhatever is not unique this shuld be MAX(FieldWhatever)
        WHEN FIELD2 = (SELECT FieldWhatever FROM TABLEB AS b WHERE a.Field2 = b.FieldWhatever)
            THEN 'PASS'
        ELSE 'FAIL'
     END
FROM TABLEA AS a

答案 2 :(得分:0)

这确实可以正常工作。下面的示例中的代码。

declare @t1 table (num int)
insert into @t1 select 1
insert into @t1 select 2

declare @t2 table (value nvarchar(10), broj int)
insert into @t2 select 'test1', 1
insert into @t2 select 'test2', 3

选择大小写(当从@ t1中选择num时),然后“好”,否则“坏”结束 来自@ t2

答案 3 :(得分:0)

是的,可以。

我使用以下方法对此进行了测试:

select top 50 ID, Name, DOB
into #Population 
from Table1


select CASE 
            when ID in (select ID from #Population) 
                then 1 
            else 0 
        end as Number 
 from #Population

我确定存在限制,但这可以回答您的问题。

祝你好运!

答案 4 :(得分:0)

一件事,您应该知道不能在内部查询中键入*,因为它会返回多个结果。因此,这里是解决方法。

SELECT ta.WH_ACC_NO,
       (CASE WHEN tb.FIELD2 IS NOT NULL
             THEN 'PASS'
             ELSE 'FAIL'
        END)
FROM TABLEA ta JOIN
     TABLEB tb
     ON tb.FIELD2 = ta.FIELD2;