[英]Case Statement for Joined Table
我有两张桌子:
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 编程非常陌生,所以如果能得到任何帮助,我将不胜感激。 如果我需要澄清任何事情,请告诉我。 谢谢!
您的代码看起来不错,但我建议:
(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 服务器和相关数据库中分配列别名。
另一种方法 - 您可以通过使用left outer join
连接两个表来标记记录。 我相信这将比EXIST
与subquery
更快的方法。
SQL -
select t1.*,
case when t2.account_id is not null then 'Y' else 'N' end as chgoff
from table1 t1
left join table2 t2 on t1.account_id = t2.account_id and t2.doctype = 'chrgoff'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.