如何在SQL中按列分组查找所有列记录是否相同

如何在SQL中按列分组查找所有列记录是否相同,sql,group-by,Sql,Group By,如何查找表中按行分组的所有列值相同 CREATE TABLE #Temp (ID int,Value char(1)) insert into #Temp (ID ,Value ) ( Select 1 ,'A' union all Select 1 ,'W' union all Select 1 ,'I' union all Select 2 ,'I' union all Select 2 ,'I' union all Select 3 ,'A'

如何查找表中按行分组的所有列值相同

CREATE TABLE #Temp (ID int,Value char(1)) 
insert into #Temp  (ID ,Value ) ( Select 1  ,'A' union all  Select 1    ,'W' union all  Select 1    ,'I' union all  Select 2    ,'I' union all  Select 2    ,'I' union all  Select 3    ,'A' union all  Select 3    ,'B' union all  Select 3    ,'1'  )

select * from #Temp 
样本表:

如果按“ID”列分组,如何查找“value”列的所有列值是否相同

例如:按ID从临时组中选择ID 对于ID 1-值列记录为A、W、I-不相同 对于ID2-值列记录为I,I-相同 对于ID 3-值列记录为A、B、1-不相同

我希望查询得到如下结果


当组中的所有项目相同时,COUNTDISTINCT值将为1:


当组中的所有项目相同时,COUNTDISTINCT值将为1:


如果您使用的是T-SQL,这可能对您有用:

SELECT t.ID, 
       CASE WHEN MAX(t.RN) > 1 THEN 'Same' ELSE 'Not Same' END AS GroupResults
FROM(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY ID, VALUE ORDER BY ID) RN
    FROM @Temp 
    ) t
GROUP BY t.ID

如果您使用的是T-SQL,这可能对您有用:

SELECT t.ID, 
       CASE WHEN MAX(t.RN) > 1 THEN 'Same' ELSE 'Not Same' END AS GroupResults
FROM(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY ID, VALUE ORDER BY ID) RN
    FROM @Temp 
    ) t
GROUP BY t.ID

通常这相当容易:按ID聚合并计算不同的值,或者比较最小值和最大值

但是,COUNTDISTINCT value、MINvalue和MAXvalue都不考虑空值。因此,对于值为“A”和null的ID,它们将检测唯一性。也许这就是您想要的,或者在您的数据中甚至不出现空值

但是,如果希望null作为一个值进行计数,则首先在null也获取一行的位置选择不同的值,然后进行计数:

select id, case when count(*) = 1 then 'same' else 'not same' end as result
from (select distinct id, value from #temp) dist
group by id
order by id;

Rextester演示:

通常这相当简单:按ID聚合并计算不同的值,或者比较最小值和最大值

但是,COUNTDISTINCT value、MINvalue和MAXvalue都不考虑空值。因此,对于值为“A”和null的ID,它们将检测唯一性。也许这就是您想要的,或者在您的数据中甚至不出现空值

但是,如果希望null作为一个值进行计数,则首先在null也获取一行的位置选择不同的值,然后进行计数:

select id, case when count(*) = 1 then 'same' else 'not same' end as result
from (select distinct id, value from #temp) dist
group by id
order by id;

Rextester demo:

您使用的是哪种DBMS?还有,如果每个ID有两个相同的值和一个不同的值怎么办?@BJones,对我来说,这仍然是不一样的。您使用的是哪种DBMS?还有,如果每个ID有两个相同的值和一个不同的值怎么办?@BJones,对我来说,这仍然是不一样的。简洁直观,我喜欢这个解决方案。简洁直观,我喜欢这个解决方案。