我們如何動態選擇欄位?
我有一張桌子Table1:
---------- ------- ----
| Table1Id | x | y |
========== ======= ====
| 52 | alex | aa |
---------- ------- ----
| 43 | liza | aa |
---------- ------- ----
| 21 | harry | bb |
---------- ------- ----
| 21 | harry | bb |
---------- ------- ----
我想加入這個Table2:
---------- ---------- -------- ------
| Table2Id | Table1Id | aa | bb |
========== ========== ======== ======
| 1 | 52 | red | tall |
---------- ---------- -------- ------
| 2 | 43 | blue | thin |
---------- ---------- -------- ------
| 3 | 21 | orange | fat |
---------- ---------- -------- ------
我正在尋找的結果是:
------- ------- ---- ----------
| xyzid | x | y | NewField |
======= ======= ==== ==========
| 52 | alex | aa | red |
------- ------- ---- ----------
| 43 | liza | aa | blue |
------- ------- ---- ----------
| 21 | harry | bb | fat |
------- ------- ---- ----------
如您所見,列中的Table1資料是y要從中獲取的確切欄位名稱Table2。
如何從表中選擇特定欄位,這些欄位實際上作為資料存盤在另一個表中?
uj5u.com熱心網友回復:
只是另一種更動態的選擇
- 不需要
CASE. table2可以有任意數量的列。- 無需將列轉換為字串或通用資料型別。
- 但是......我懷疑比The Impalar的答案性能稍差。
我應該注意,這是針對 2017 的。奇怪的是,2016 年需要一個“ string literal”來表示JSON_VALUE或JSON_QUERY。
示例或
更新 - 2016 版本
Select xyzid = A.Table1Id
,A.x
,A.y
,NewField = (select max([Value]) from OpenJSON(B.JS) where [key]=A.Y collate database_default)
From Table1 A
Join ( Select [Table1Id]
,JS=(Select B1.* For JSON Path,Without_Array_Wrapper )
From Table2 B1 ) B
on A.[Table1Id]=B.[Table1Id]
2016 年第二個方法——也許性能 稍高的 dbFiddle
Select xyzid = A.Table1Id
,A.x
,A.y
,NewField = B.Value
From Table1 A
Join (
Select [Table1Id]
,[Key]
,Value
From Table2 B1
Cross Apply OpenJson((Select B1.* For JSON Path,Without_Array_Wrapper ) )
) B
on A.[Table1Id]=B.[Table1Id]
and A.Y = B.[Key] collate database_default
uj5u.com熱心網友回復:
您可以使用 動態選擇列CASE,如下所示:
select
a.Table1Id as xyzid,
a.x,
a.y,
case
when a.y = 'aa' then b.aa
when a.y = 'bb' then b.bb
end as NewField
from (select distinct * from table1) a
join table2 b on b.Table1Id = a.Table1Id
結果:
xyzid x y newfield
------ ------ --- --------
52 alex aa red
43 liza aa blue
21 harry bb fat
請參閱DB Fiddle 上的運行示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374192.html
標籤:sql sql-server 查询语句
