我希望查询大量数据,并查找哪些列(如果有)都包含相同的值。 (例如,所有邮政编码都相同)我已经考虑了
的影响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.有重复地址这一事实并不重要因为那里是该列中不止一个唯一值。我希望有一种通用方式,不会让我在查询中键入每个列名称,因为第一个结果(我相信)会让我这样做。
答案 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标准,但不同的数据库有不同的表达此操作的方式。