查找哪些列包含来自查询的相同结果

时间:2015-08-13 21:05:30

标签: sql

我希望查询大量数据,并查找哪些列(如果有)都包含相同的值。 (例如,所有邮政编码都相同)我已经考虑了

的影响
where count(distinct([column])) = 1

但我无法弄清楚如何检查每一列,或返回哪些列具有相同的值。

实施例: Joe,Jane和John都是外部选择的。我需要找出它们的共同特征。

Name        Phone        Address       City      State     Zip       Member#
John        1234567890   123 South St  Chicago   IL.       12345     54321
Jane        9876543210   123 South St  New York  NY.       12345     67890
Joe         1239874560   123 North St  Las Vegas NV.       12345     75315

所以我正在尝试创建一个查看这些数据的查询,并说他们所有的共同点就是邮政编码,都是12345.有重复地址这一事实并不重要因为那里是该列中不止一个唯一值。我希望有一种通用方式,不会让我在查询中键入每个列名称,因为第一个结果(我相信)会让我这样做。

1 个答案:

答案 0 :(得分:1)

您可以使用case语句聚合来执行此操作:

select (case when count(distinct col1) = 1 then 'ALL SAME' end) as col1_type,
       (case when count(distinct col2) = 1 then 'ALL SAME' end) as col2_type,
       . . .
from t;

如果您希望将它们作为列表,您可以执行以下操作:

select concat((case when count(distinct col1) = 1 then concat('col1', ';' else '' end),
              (case when count(distinct col2) = 1 then concat('col2', ';' else '' end),
              . . . 
             ) 
from t;

虽然concat()是ANSI标准,但不同的数据库有不同的表达此操作的方式。

相关问题