如何在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,对我来说,这仍然是不一样的。简洁直观,我喜欢这个解决方案。简洁直观,我喜欢这个解决方案。