我正在寻找一种只选择列值的方法。
表格中的数据示例:
Name City Age
-----------------------
James New York 20
Charles New York 21
Tom New York 22
select all query的输出示例:
Name City Age
-----------------------
James New York 20
Charles New York 21
Tom New York 22
但如果查尔斯住在伦敦,我希望不打印任何城市或默认值。
表格中的数据示例:
Name City Age
------------------------
James New York 20
Charles Londen 21
Tom New York 22
select all查询的输出示例。
Name City Age
-----------------------
James / 20
Charles / 21
Tom / 22
我希望你能让sql魔术发生......
我尝试使用案例结构但没有任何成功。我正在使用SQL Server。
答案 0 :(得分:3)
使用联接到其他城市,并屏蔽重复项:
select distinct
p.name,
case when p2.city is not null then null else p.city end city,
p.age
from person p
left join person p2 on p.name = p2.name
and p.city != p2.city
distinct
只为重复的城市生成一行结果。
此查询依赖于城市之间给定名称的年龄一致。如果不是,请使用max(age)
之类的内容,并按其他列进行分组。
要为重复项提供默认值而不是null
,请将then null
更改为then 'Various'
(例如)。
答案 1 :(得分:0)
我不认为接受的答案能解决OP的问题,因为它只会检查同名人物在城市中的唯一性。它也不满足提供的第二个数据集。
以下查询在整个列中检查唯一性,并满足OP提供的输入的示例输出。
SELECT
p.name,
CASE
WHEN stats.unique_cities > 1 THEN '/'
ELSE p.city
END city,
p.age
FROM person p
CROSS JOIN (SELECT COUNT(DISTINCT city) unique_cities FROM person) stats;
CROSS JOIN
(ANSI-92语法)也可以替换为,
语法(ANSI-89语法),即FROM person p, (SELECT ...
。
答案 2 :(得分:-1)
你可以尝试这个 - 选择名称, 情况何时 (从myt中选择计数(不同的id))> 1 然后7 其他 ID 结束为身份 来自myt 按ID分组,名称
table myt - name,id