Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server TSQL-查找购买了两套产品的客户_Sql Server_Tsql - Fatal编程技术网

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!当然更容易阅读。谢谢你!