繁体   English   中英

使用计算列使用别名的 SQL 连接

[英]SQL join using alias using calculated column

我有一张表,其中包含过去 10 年的列。 我正在尝试获取当前年份列,但出现错误。

表 ABC:

在此处输入图片说明

select a.*, b.year(getdate())
from d1 a 
  left join ABC b on a.name = b.name

这是一个查询,它将各个年份列反透视为 yr 和 yr_val 2 列。 当 yr=year(getdate()) 时,将返回当前年份值。 GMB 使用 unpivot 查询。

select a.*
from d1 a 
     cross apply
     (values (2018, a.[2018]),
             (2019, a.[2019]),
             (2020, a.[2020]),
             (2021, a.[2021]),
             (2022, a.[2022]),
             (2023, a.[2023]),
             (2024, a.[2024])) v(yr, yr_val)
where v.yr=year(getdate());

在纯 SQL 中,您不能让查询动态选择它应该返回的列。 查询返回一组固定的列,数据库需要在解析查询时知道,然后再执行。

您可以使用动态 SQL 解决一些问题 - 但它似乎只会使事情变得不必要地复杂。

更好的选择是更改您的数据模型,以便将每个值存储在单独的行而不是列中:

name    year    value
A       2018    18
A       2019    24
A       2020    72
B       2018    38
B       2019    19
B       2020    76

然后,查询很简单:

select * from mytable where year = year(getdate())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM