我有以下格式的表格:
| 參考 | 其他參考 |
|---|---|
| 水果 | 蘋果 |
| 水果 | 香蕉 |
| 水果 | 檸檬 |
| 蔬菜 | 蘿卜 |
| 蔬菜 | 土豆 |
我想要做的是把它弄平,所以它看起來像下面這樣:
| 參考 | 其他參考 | 其他參考B | 其他參考文獻 |
|---|---|---|---|
| 水果 | 蘋果 | 香蕉 | 檸檬 |
| 蔬菜 | 蘿卜 | 土豆 |
由于附加列的動態性質,我遇到了麻煩,因為OtherRef與之相關的數量會Ref有所不同。
任何人都可以建議我如何實作這一目標?我正在使用 SQL Server 2014。
uj5u.com熱心網友回復:
一個可能的解決方案是動態陳述句(......列名略有不同):
-- Dynamic columns
DECLARE @stmt nvarchar(max)
SELECT @stmt = STUFF(
(
SELECT CONCAT(N', OtherRef', RN)
FROM (
SELECT DISTINCT ROW_NUMBER() OVER (PARTITION BY Ref ORDER BY OtherRef) AS RN
FROM Data
) t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),
1, 2, N''
)
-- Dynamic statement
SET @stmt =
N'SELECT * '
N'FROM ( '
N' SELECT '
N' Ref, '
N' OtherRef, '
N' CONCAT(''OtherRef'', ROW_NUMBER() OVER (PARTITION BY Ref ORDER BY OtherRef)) AS PivotColumn '
N' FROM Data '
N') t '
N'PIVOT ( '
N' MAX(OtherRef) FOR PivotColumn IN (' @stmt N') '
N') p '
-- Execution
DECLARE @err int
EXEC @err = sp_executesql @stmt
IF @err <> 0 PRINT 'Error';
結果:
-------------------------------------------------
| Ref | OtherRef1 | OtherRef2 | OtherRef3 |
-------------------------------------------------
| Fruit | Apple | Banana | Lemon |
| Vegetable | Carrot | Potato | |
-------------------------------------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514593.html
標籤:sqlsql服务器tsqlsql-server-2014-express
上一篇:通過多個書擋拆分問題和答案文本
下一篇:按定義的日期對資料框進行分組
