SQL:查询2列;如果一个有效,则忽略另一个
我不知道如何处理这个SQL语句,所以请给出建议,即使它只是指向我可以读懂的东西的指针 我有一张桌子,如下所示SQL:查询2列;如果一个有效,则忽略另一个,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我不知道如何处理这个SQL语句,所以请给出建议,即使它只是指向我可以读懂的东西的指针 我有一张桌子,如下所示 ID OVER60 OVER80 1 N N 2 Y N 3 Y Y ID是唯一的,我需要做的是创建一个SELECT语句来返回ID,然后选择“超过60”或“超过80”,例如: ID AGE 2 Over 60 3
ID OVER60 OVER80
1 N N
2 Y N
3 Y Y
ID是唯一的,我需要做的是创建一个SELECT语句来返回ID,然后选择“超过60”或“超过80”,例如:
ID AGE
2 Over 60
3 Over 80
我需要避免的是重复,这意味着如果某人“超过80”,那么就没有必要同时显示“超过60”,因为这是非常明显的
我已经看过工会,看看这是否会有帮助,这就是我目前所做的:
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'
;
我有什么选择?用负号能帮我吗
谢谢您应该能够使用 类似的东西
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'
您应该能够使用一个 类似的东西
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'
案例,如果,合并-各种方法在这里是可能的。很大程度上取决于您使用的数据库服务器 情况,如果,合并-这里可以使用各种方法。很大程度上取决于您使用的数据库服务器 如果您想更好地扩展,正确的方法是重新设计您的表。每行函数(如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;
如果有一个关于出生日期的索引,这应该会让人大吃一惊,因为除非数据库管理系统是脑死亡的,否则现在-N年只能计算一次。如果你想更好地扩展,正确的方法是重新设计你的表。每行函数(如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;
如果有一个关于出生日期的指数,那就应该大惊小怪了,因为除非数据库管理系统是脑死亡的,否则现在-N年只能计算一次。其中a.OVER_80='Y'是多余的感谢Astander,我使用的是你建议的解决方案,因此在此基础上接受。再次感谢a.OVER_80='Y'是多余的感谢Astander,我正在使用您建议的解决方案,因此在此基础上接受。谢谢Hanks Pax,是的,如果我有机会,我会重新执行表格,但不幸的是,我没有时间这样做,因此需要一个案例。我明白你的意思,希望能从中吸取教训+1无论如何,谢谢你,是的,如果我有机会,我会重新执行表格,但不幸的是,我没有时间这样做,因此需要一个案例。我明白你的意思,希望能从中吸取教训+1无论如何