SQL-如果一列中的所有值与另一列中的所有值匹配,是否可以从该列中选择所有不同的值?

SQL-如果一列中的所有值与另一列中的所有值匹配,是否可以从该列中选择所有不同的值?,sql,sql-server,dataset,distinct,Sql,Sql Server,Dataset,Distinct,我已经研究了以前的问题,但找不到一个与我相同或易于理解的问题。我希望这是一个相对简单的答案无论如何,如果我有重复,对不起 我有一个SQL表格,按照下面的简化版本对我们所有的报告进行编目。 它的主键为ReportCountryID、ReportID、CountryID、CountryName 我想做的是找出哪些报告使用了所有相同的国家名称,这些国家名称是什么 在上面的例子中,只有报告9278和9740使用了波斯尼亚和黑塞哥维那、捷克共和国、俄罗斯、英国和美国。然而,这只是我从视觉上看到差异的一个小

我已经研究了以前的问题,但找不到一个与我相同或易于理解的问题。我希望这是一个相对简单的答案无论如何,如果我有重复,对不起

我有一个SQL表格,按照下面的简化版本对我们所有的报告进行编目。 它的主键为ReportCountryID、ReportID、CountryID、CountryName

我想做的是找出哪些报告使用了所有相同的国家名称,这些国家名称是什么

在上面的例子中,只有报告9278和9740使用了波斯尼亚和黑塞哥维那、捷克共和国、俄罗斯、英国和美国。然而,这只是我从视觉上看到差异的一个小样本

输出可能是这样的吗-

9728 9740 Bosnia & Herzegovina Bosnia & Herzegovina Czech Republic Czech Republic Russia Russia UK UK USA USA
以下选择将在表中再次返回至少具有相同CountryName的所有记录,然后将它们分组以忽略ReportCountryID字段:

输出以及您的数据子集如下所示:

ReportID CountryID CountryName ----------- ----------- ----------------------------------------------------------- 9278 13 Bosnia & Herzegovina 9740 13 Bosnia & Herzegovina 9278 25 Czech Republic 9740 25 Czech Republic 8447 83 Russia 9278 83 Russia 9672 83 Russia 9714 83 Russia 9740 83 Russia 9742 83 Russia 9278 106 UK 9740 106 UK 9252 110 USA 9278 110 USA 9740 110 USA
期望的输出是什么样的?你能发布样本输出而不是试图用文字描述它吗?嗨,拉杰什,谢谢你的回答。但是,当我在示例数据上尝试此操作时,只返回ReportID 9278。@jellybean1977,我尝试使用示例数据并获得9278和9740,下面是sql fiddle演示,谢谢Rajesh。您的代码正在运行。我想我一定是在创建示例表时出错了。但是,如果我使用位,您说如果我想匹配所有不同的国家,我不会得到任何结果?@jellybean1977,是的,没有报告将所有国家关联起来,您可以接受答案,因为它对您有效抱歉,当您已经知道应该匹配哪些国家时,它会起作用。我真正想要的是找出哪些ReportID与更大数据集中的相同国家相匹配的方法。这可能吗?
select ReportID,
       CountryID,
       CountryName
  from ReportCountryTable rpt1
 where exists (select 1
                 from ReportCountryTable rpt2
                where rpt2.ReportCountryID <> rpt1.ReportCountryID
                  and rpt2.CountryName     = rpt1.CountryName) -- or you can use rpt2.CountryID = rpt1.CountryID
 group by ReportID,
          CountryID,
          CountryName
 order by CountryID,
          CountryName
ReportID CountryID CountryName ----------- ----------- ----------------------------------------------------------- 9278 13 Bosnia & Herzegovina 9740 13 Bosnia & Herzegovina 9278 25 Czech Republic 9740 25 Czech Republic 8447 83 Russia 9278 83 Russia 9672 83 Russia 9714 83 Russia 9740 83 Russia 9742 83 Russia 9278 106 UK 9740 106 UK 9252 110 USA 9278 110 USA 9740 110 USA
DECLARE @tempTable table
(
  countryID int
)

--Match with five countries as per the example
INSERT INTO @tempTable values 
( 25 ), (13) ,(110) , (106), (83)
--In case you want to match all distinct countries then you can comment above line and use below line.
--INSERT INTO @tempTable 
--SELECT distinct CountryID from Table1

SELECT T1.ReportID FROM
Table1 T1
JOIN ( SELECT countryId from @tempTable ) T2
ON T1.CountryID = T2.countryID
GROUP BY T1.ReportID
HAVING COUNT( DISTINCT  T1.CountryID) = ( SELECT COUNT(countryID) FROM @tempTable)