SQL - 带 IN SELECT 的 CASE

问题描述 投票:0回答:1

我正在尝试隔离那些

[table]
的记录,其中only具有特定的(比方说bad)属性。不良属性是那些 ID 为 3、6 和/或 7 的属性。为此,我提出了以下解决方案:

SELECT * FROM (SELECT DISTINCT x, y, id_attribute FROM [table]) 
HAVING SUM(CASE WHEN id_attribute IN (3, 6, 7) THEN 0 ELSE 1 END) = 0

这效果很好。我现在想更进一步,删除

(3, 6, 7)
上的硬编码,因为不良属性可能会改变。所以,我想用
(3, 6, 7)
替换
(SELECT DISTINCT id_attribute from [other_table] where description = 'bad')

但是,当我将两者放在一起时,我的查询失败并显示以下消息:

无法对包含聚合或子查询的表达式执行聚合函数。

还有其他方法可以做到这一点吗?

sql subquery case aggregate-functions having
1个回答
0
投票

您可以使用

Left Join
来隔离那些不良属性:

SELECT * FROM (
SELECT DISTINCT x, y, id_attribute,other_table.id as other_id_attribute FROM [table]
left join other_table on id_attribute=other_table.id
) 
GROUP by ....
HAVING SUM(CASE WHEN other_id_attribute is not null THEN 0 ELSE 1 END) = 0

© www.soinside.com 2019 - 2024. All rights reserved.