这样可能吗?
SELECT WH_ACC_NO,
CASE
WHEN FIELD2 IN (SELECT * FROM TABLEB)
THEN 'PASS'
ELSE 'FAIL'
END
FROM TABLEA
答案 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;
我已将FIELD2
与TABLEB
一起使用,您可以使用正确的列名来更正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;