簡體   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