我有一個看起來像這樣的資料集(其中 ID1 和 ID2 的代碼永遠不會相同。因此將它們放在一起它們仍然是唯一的):
| ID | ID1 | 姓名 | 年齡 | ID2 | 基本的 | 中學 |
|---|---|---|---|---|---|---|
| 1 | 1234 | 吉姆 | 34 | 1111 | 火星 | 一種 |
| 2 | 1234 | 湯姆 | 24 | 1111 | 火星 | 一種 |
| 3 | 1234 | 瑞克 | 55 | 1112 | 火星 | 乙 |
| 4 | 2222 | 安 | 22 | 木星 | ||
| 5 | 2222 | 麗茲 | 54 | 3000 | 木星 | 一種 |
| 6 | 2222 | 弗雷 | 19 | 3000 | 木星 | 一種 |
我想要做的是對于每個在 ID2 中有值的人,我想在底部添加這個人,并希望將 ID1 與 ID2 和主要與次要條目交換。因此,在我想創建上述條目的視圖中,將在此處添加以下條目:
| ID | ID1 | 姓名 | 年齡 | ID2 | 基本的 | 中學 |
|---|---|---|---|---|---|---|
| 7 | 1111 | 吉姆 | 34 | 1111 | 一種 | 一種 |
| 8 | 1111 | 湯姆 | 24 | 1111 | 一種 | 一種 |
| 9 | 1112 | 瑞克 | 55 | 1112 | 乙 | 乙 |
| 10 | 3000 | 麗茲 | 54 | 3000 | 一種 | 一種 |
| 11 | 3000 | 弗雷 | 19 | 3000 | 一種 | 一種 |
我嘗試了很多東西。就像為 ID2 值創建單獨的臨時表一樣,但我只是想不出完成這個的想法。誰能幫我解決這個問題?
uj5u.com熱心網友回復:
聽起來你想要的只是將行插入回表
INSERT INTO tbl ( ID1 , Name , AGE , ID2 , Primary , Secondary )
SELECT ID2 , Name , AGE , ID2 , Secondary , Secondary
FROM tbl
WHERE ID2 IS NOT NULL
uj5u.com熱心網友回復:
Select ID,ID1,Name,ID2,Primary,Secondary From Tab1
UNION ALL
Select ID,ID2 as ID1 ,Name,ID2,Secondary AS Primary,Secondary From Tab1
WHERE ID2 IS NOT NULL
uj5u.com熱心網友回復:
如果您想要一個查詢來定義視圖,您可以執行以下操作。
您想如何生成 ID 值并不完全清楚,但以下將產生您想要的結果:
select ID, ID1, [Name], AGE, ID2, [Primary], [Secondary]
from t
union all
select max(id) over() Row_Number() over (order by id)ID,
ID2, [Name], AGE, ID2, [Secondary], [Secondary]
from t
where id2 is not null
uj5u.com熱心網友回復:
為避免兩次查詢資料,您可以在 APPLY
CREATE VIEW YourView
AS
SELECT
t.ID,
v.ID1,
t.Name,
t.ID2,
v.Primary,
t.Secondary
FROM YourTable t
CROSS APPLY (VALUES
SELECT ID1, Primary
UNION ALL
SELECT ID2, Secondary
WHERE ID2 IS NOT NULL
) v
GO
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340089.html
標籤:sql sql-server 查询语句
上一篇:SQL:臨時表和腳本在第二次使用時失敗,但在第一次使用時有效
下一篇:MSSQL中的移動平均線?
