我不确定如何处理这个SQL语句所以请指教,即使它只是指向我可以阅读的内容的指针
我有一张表,例如以下
ID OVER60 OVER80
1 N N
2 Y N
3 Y Y
ID是唯一的,我需要做的是创建一个将返回ID的SELECT
语句,然后是'Over 60'或'Over 80',例如:
ID AGE
2 Over 60
3 Over 80
我需要避免的是重复,这意味着如果某人是'超过80岁',那么就不需要显示'超过60',因为它非常明显
我看了UNION
,看看这是否会有所帮助,这就是我到目前为止所做的:
SELECT
a.id,
'OVER60' as AGE
FROM
MY_TABLE a
WHERE
a.OVER_60 != 'N'
UNION
SELECT
a.id,
'OVER80' as AGE
FROM
MY_TABLE a
WHERE
a.OVER_80 != 'N'
;
我有什么选择?我会在这里使用MINUS
帮助我吗?
由于
答案 0 :(得分:3)
您应该可以使用CASE STATEMENT。
Something ike
SELECT a.ID,
CASE
WHEN a.OVER_80 = 'Y' THEN 'OVER80'
WHEN a.OVER_60 = 'Y' THEN 'OVER60'
END
FROM MY_TABLE
WHERE a.OVER_60 = 'Y'
答案 1 :(得分:1)
CASE,IF,COALESCE - 这里有各种方法。很大程度上取决于您使用的数据库服务器;)
答案 2 :(得分:1)
如果你想要很好地扩展,正确的方法是重新设计你的表。像case
和coalesce
这样的每行功能无法扩展。
根本不存储数据库中是否超过60或80。首先,随着时间的推移,这是一个可变的事情。存储他们的生日,这是一个不变的。
然后只需运行:
select a.id, 'over 60' from my_table
where birthdate < now() - 60 years
and birthdate >= now() - 80 years
union all select a.id, 'over 80' from my_table
where birthdate < now() - 80 years;
对于生日的索引,应该尖叫,因为除非DBMS脑死亡,now() - N years
只会计算一次。