Sql server TSQL-查找购买了两套产品的客户
我有一个包含如下值的表:Sql server TSQL-查找购买了两套产品的客户,sql-server,tsql,Sql Server,Tsql,我有一个包含如下值的表: Customer Product# A 1 A 3 A 5 A 7 A 11 A 13 B 5 B 11 B 13 C 4 C 5 C 6 C
Customer Product#
A 1
A 3
A 5
A 7
A 11
A 13
B 5
B 11
B 13
C 4
C 5
C 6
C 11
C 14
C 42
C 60
我想要一个能给我提供以下所有客户的查询:
a. Either Product# 1 OR 5
AND
b. BOTH Product# 11 AND 13.
如果有任何帮助或建议,我将不胜感激
谢谢 试试这个:
select customer
from your_table
group by customer
having count(distinct case
when product# in (11, 13)
then product#
end) = 2
and count(case
when product# in (1, 5)
then 1
end) > 0
按客户分组以查找是否同时存在11和13,使用条件聚合,类似地,检查客户是否至少有一行包含1或5。“HAVING”起作用,但您也可以通过两个子选择来实现这一点-时间更长、效率更低,但更易于记录和/或与更复杂的输出一起使用
SELECT DISTINCT
a.customer
FROM
your_table AS a
WHERE
a.customer IN ( SELECT customer FROM your_table WHERE product# IN (1,5) )
AND a.customer IN ( SELECT customer FROM your_table WHERE product# = 11)
AND a.customer IN ( SELECT customer FROM your_table WHERE product# = 11)
为什么这个问题被否决了这么多?这是一个有趣的问题,一个棘手的问题,对于初学者来说显然是一个棘手的问题。“你们不是都有过这样的经历吗?”卢卡塞德我猜是因为它没有试图解决问题,可能是一篇寻找家庭作业问题快速答案的帖子。@dfundako:真的吗?那又怎样还是一个有趣的问题让我思考…@dfundako:当我发布这个问题时,我已经解决了这个问题。我想知道是否有更优雅的解决方案。我的工作解决方案包括为我的每个数据“段”[1.使用产品1或5的客户,2.使用产品11和13的客户]创建表变量并将适当的数据插入其中。最后,我对表变量进行了选择,得到了我所需要的。我觉得我的方式过于简单[我不认为在sql::&@GurV的回答提供了一个我不可能想到的选择。我不想用这些细节把我的问题弄得一团糟,但是…@dfundako:另外。。。为了便于理解/回答,我简化了数据。实际的数据要复杂得多,涉及更多的表和联接,但我只需要(并从@GurV获得)基本的机制。尽管如此,如果这真的是为了完成家庭作业,那会不会让它变得不值得回答呢?或只有深奥、怪异和奇妙的sql难题值得发布吗?用一位前同事的话说,唯一愚蠢的问题就是你没问的问题德汉克斯@Franz Stoneking!当然更容易阅读。谢谢你!