3
A
回答
0
一個想法是使用Row_Number()
作爲加入領域。像這樣:
SELECT T.Account, T.Description, T1.Value_1, T2.Value_2, T3.Value_3, T4.Value_4
From
(
SELECT Account, Description, Value_1, Value_2, Value_3, Value_4,
Row_number() OVER (ORDER BY (SELECT 0)) rn
FROM YourTable
) T
LEFT JOIN (
SELECT Account, Value_1, Row_number() OVER (ORDER BY (SELECT 0)) rn
FROM YourTable
WHERE Value_1 <> '') T1 ON T.Account = T1.Account AND T.rn = T1.rn
LEFT JOIN (
SELECT Account, Value_2, Row_number() OVER (ORDER BY (SELECT 0)) rn
FROM YourTable
WHERE Value_2 <> ''
) T2 ON T.Account = T2.Account AND T.rn = T2.rn
LEFT JOIN (
SELECT Account, Value_3, Row_number() OVER (ORDER BY (SELECT 0)) rn
FROM YourTable
WHERE Value_3 <> ''
) T3 ON T.Account = T3.Account AND T.rn = T3.rn
LEFT JOIN (
SELECT Account, Value_4, Row_number() OVER (ORDER BY (SELECT 0)) rn
FROM YourTable
WHERE Value_4 <> ''
) T4 ON T.Account = T4.Account AND T.rn = T4.rn
WHERE T1.Value_1 IS NOT NULL
OR T2.VALUE_2 IS NOT NULL
OR T3.VALUE_3 IS NOT NULL
OR T4.VALUE_4 IS NOT NULL
如果您的值存儲爲空白,那麼這應該工作。如果它們存儲爲NULL,則用IS NOT NULL替換<>''。
這是SQL Fiddle。
祝你好運。
10
我認爲這樣做最簡單的方法是通過應用兩個UNPIVOT
和PIVOT
函數來得到結果:
select account, description,
[value_1], [value_2], [value_3], [value_4]
from
(
select account, description, col, value,
row_number() over(partition by account, col order by col) rn
from
(
select [account], [description], [value_1], [value_2], [value_3], [value_4]
from yourtable
) src
unpivot
(
value
for col in ([value_1], [value_2], [value_3], [value_4])
) un
) s
pivot
(
max(value)
for col in ([value_1], [value_2], [value_3], [value_4])
) piv
由此也可以使用UNION ALL
作爲逆透視和骨料功能和CASE
表達式實現:
select account, description,
max(case when col = 'value_1' then value end) value_1,
max(case when col = 'value_2' then value end) value_2,
max(case when col = 'value_3' then value end) value_3,
max(case when col = 'value_4' then value end) value_4
from
(
select account, description, col, value,
row_number() over(partition by account, col order by account) rn
from
(
select [account], [description], 'value_1' col, [value_1] value
from yourtable
where [value_1] is not null
union all
select [account], [description], 'value_2' col, [value_2] value
from yourtable
where [value_2] is not null
union all
select [account], [description], 'value_3' col, [value_3] value
from yourtable
where [value_3] is not null
union all
select [account], [description], 'value_4' col, [value_4] value
from yourtable
where [value_4] is not null
) s
) un
group by account, description, rn
兩者得到的結果:
| ACCOUNT | DESCRIPTION | VALUE_1 | VALUE_2 | VALUE_3 | VALUE_4 |
----------------------------------------------------------------------
| A00005 | Account Desc | ABCD0081 | BCDE0010 | BKCP0010 | SMTP0010 |
| A00005 | Account Desc | ABCD0082 | (null) | BKCP0011 | (null) |
相關問題
- 1. 如何分組來自不同列的值sql
- 2. 如何將行值分組爲列?
- 3. 將鍵值列分組爲一行
- 4. 如何將來自兩個不同散列數組的值添加到一起?
- 5. 將組合列值分解爲不同的行
- 6. 如何將來自不同來源的通知分組到一個模型中
- 7. 如何附加來自同一列的不同值?
- 8. 如何根據列的唯一值對列進行分組並根據其值來計入不同的列?
- 9. 如何在列中分組行值並將行轉換爲列?
- 10. 如何不同值分配給一個列不同行
- 11. 如何將數組值分爲3列?
- 12. 如何根據按不同對分組的列值來選擇行?
- 13. 如何將多行分組爲一行?
- 14. 合併來自不同行的布爾結果分爲單列
- 15. 如何根據2個不同的列值將一行分成兩部分
- 16. 如何僅將JSON文檔分組爲不同的值?
- 17. 如何將行分組爲具有多個值的列?
- 18. 如何將同一列中的不同值組合到一列中?
- 19. 顯示來自不同行的多個值與同一列中的值
- 20. 如何將一行中的多個值拆分爲不同的行?
- 21. 如果列值來自不同的文件,如何將列插入數據框?
- 22. MYSQL來自同一列中選擇多個值作爲行
- 23. 將列值限制爲同一個表內不同列的值?
- 24. 將來自不同表格的行值合併到一列中。 [SQL]
- 25. MySQL查詢將值分配給來自不同列的相同變量
- 26. 使用PHP將來自CSV的數組的不同部分組合在一起?
- 27. 如何將行拆分爲Spark DataFrame/DataSet中的不同列?
- 28. PHP MySQL將來自不同行的單元格的值相同
- 29. (JasperReports)將來自不同數據源的數據組合爲同一報告行的列
- 30. 將SQL分組爲一列中逗號分隔的值列表
是什麼讓你把BCDE0010放在第一排和第二排? –
哪個數據庫 - SQL Server,MySQL,Oracle? – sgeddes
您正在嘗試的操作稱爲數據透視表。嘗試在「數據透視表」上進行谷歌搜索 – DwB