尋找將列轉換為行的任何解決方案。
我的列是 [CA_resp]、[CA_spen]、[TX_resp]、[TX_spen]、[PA_resp]、[PA_spen],這些列需要轉換為行。所有州(CA、TX、PA)都應該進入 [market] 列,[resp] 需要是其他列 [spen] 需要是其他列。
這是一個示例:我有一個具有以下架構的表:
CREATE TABLE stage.test(
id int null,
[month] [varchar](255) NULL,
[year] [float] NULL,
CA_resp [float] NULL,
CA_spen [money] NULL,
TX_resp [float] NULL,
TX_spen [money] NULL,
PA_resp [float] NULL,
PA_spen [money] NULL)
INSERT into stage.test
values(1, 'jan', 2022,222,`enter code here`450,111,450,444,550)
我希望我的輸出是。
ID, month,year, market, resp ,spen
1 jan 2022 CA 222 350
1 jan 2022 TX 111 450
1 jan 2022 PA 444 550
我嘗試使用 Pivot 并沒有作業。
uj5u.com熱心網友回復:
您不能在您的情況下使用Pivot,因為您沒有足夠的行/列。
您需要“創建”行,這可以使用單獨的 select 陳述句結合union來完成。
我更喜歡交叉加入它們,這樣您就不必在每次選擇中重復相同的列。
但是您也可以直接將 select 與 union 一起使用,這取決于您
select t.id, t.month, t.year, v.market, v.CA_resp as resp, v.CA_spen as spen
from test t
cross join (select 'CA' as market, CA_resp, CA_spen from test
union
select 'TX' as market, TX_resp, TX_spen from test
union
select 'PA' as market, PA_resp, PA_spen from test
) v
結果是
| ID | 月 | 年 | 市場 | 回應 | 花費 |
|---|---|---|---|---|---|
| 1 | 一月 | 2022 | 加州 | 222 | 450.0000 |
| 1 | 一月 | 2022 | 功放 | 444 | 550.0000 |
| 1 | 一月 | 2022 | 德克薩斯州 | 111 | 450.0000 |
這是DBFiddle
或者您可以將所有欄位放在 3 個選擇中并使用 union,結果是一樣的,只需使用您最喜歡的
select id, month, year, 'CA' as market, CA_resp as resp, CA_spen as spen from test
union
select id, month, year, 'TX' as market, TX_resp, TX_spen from test
union
select id, month, year, 'PA' as market, PA_resp, PA_spen from test
uj5u.com熱心網友回復:
您可以簡單地使用 3 個查詢UNION ALL。這種方法非常有效,因為我們一個接一個地輸出 3 個簡單查詢。沒有連接或其他資料比較。(UNION沒有 all 的連接是另一回事,因為它比較查詢以消除重復。)
CREATE TABLE stagetest(
id int null,
[month] [varchar](255) NULL,
[year] [float] NULL,
CA_resp [float] NULL,
CA_spen [money] NULL,
TX_resp [float] NULL,
TX_spen [money] NULL,
PA_resp [float] NULL,
PA_spen [money] NULL);
INSERT into stagetest
values(1, 'jan', 2022,222,450,111,450,444,550);
--ID, month,year, market, resp ,spen
-- 1 jan 2022 CA 222 350
-- 1 jan 2022 TX 111 450
-- 1 jan 2022 PA 444
SELECT id, [month], [year], 'CA' market, ca_resp Resp, ca_spen Spen
from stagetest
union all
SELECT id, [month], [year], 'PA', pa_resp, pa_spen
from stagetest
union all
SELECT id, [month], [year], 'TX', tx_resp, tx_spen
from stagetest;
| ID | 月 | 年 | 市場 | 回應 | 花費 |
|---|---|---|---|---|---|
| 1 | 一月 | 2022 | 加州 | 222 | 450.0000 |
| 1 | 一月 | 2022 | 功放 | 444 | 550.0000 |
| 1 | 一月 | 2022 | 德克薩斯州 | 111 | 450.0000 |
在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/432424.html
上一篇:如果以前出現過,則SQL不同
