我有两个表:
Account ID | A | B
-------------------
1 | x | y
2 | c | f
3 |...|...
第一个表是一般帐户列表。第二张表是每个帐户的现有文件清单:
Account ID | Doctype
---------------------
1 | chrgoff
2 | dtpmnt
2 | chrgoff
3 | lstpmt
3 | suit
对于我要创建的报告,我需要在第一个表中创建一列,用于存储标志的值,其中“ Y”表示第二个表包含给定帐号的docType“ chrgoff”。
我尝试使用以下case语句执行此操作,但查询根本不会执行:
'chgoff' =
CASE
WHEN EXISTS(SELECT docType FROM table2 WHERE docType='chrgoff' and AccountID=table1.accountID)
THEN 'Y'
ELSE 'N'
END
我对T-SQL编程非常陌生,因此,我将不胜感激!让我知道是否需要澄清任何事情。谢谢!
答案 0 :(得分:2)
您的代码看起来还不错,但我建议:
(CASE WHEN EXISTS (SELECT docType FROM table2 t2 WHERE t2.docType = 'chrgoff' and t2.AccountID = table1.accountID)
THEN 'Y'
ELSE 'N'
END) as chgoff
主要区别在于:
对于as
与=
。我更喜欢前者,因为它是标准SQL。 =
仅在SQL Server和相关数据库中分配列别名。
答案 1 :(得分:1)
另一种方法-您可以通过将两个表都与left outer join
联接来标记一条记录。我相信这比使用EXIST
的{{1}}更快。
SQL-
subquery