Sql-Server
將多行合併為最少數量的不同值行
在 SQL Server 中,是否有人知道將多行數據合併/展平為僅包含不同非空值的盡可能少的行的好方法。
是的
像這樣的數據集:
像這樣:
如果有幫助,之前的數據集是一個旋轉的行列表,但沒有聚合。我無法在數據透視期間聚合它,因為我想保留每個不同的值而不是取 MAX 或 MIN。
我能想到的唯一方法是將數據拆分並將它們重新組合在一起,這不會很有效。
您的數據似乎在各個列值之間缺乏任何關係。如果您可以定義這種關係,您就可以
PIVOT
適當地處理數據。例如,如果您只是想根據值的順序(基於您的預設排序規則)對齊數據,您可以使用:
with rawdata as ( select * from (values ('00000000-0000-0000-0000-000000037850','Col2','Yes_02') ,('00000000-0000-0000-0000-000000037850','Col3','Full marketing schedule') ,('00000000-0000-0000-0000-000000037850','Col3','Negotiations started, fell through') ,('00000000-0000-0000-0000-000000037850','Col3','No budget') ,('00000000-0000-0000-0000-000000037850','Col3','Not interest') ,('00000000-0000-0000-0000-000000037850','Col3','Passed to Summerhouse') ,('00000000-0000-0000-0000-000000037850','Col4','Darren Waters_01') ,('00000000-0000-0000-0000-000000037850','Col4','David Edwards_01') ,('00000000-0000-0000-0000-000000037850','Col4','David Simons_01') ,('00000000-0000-0000-0000-000000037850','Col4','Jason Gould_01') ,('00000000-0000-0000-0000-000000037850','Col4','Martin Thorpe_01') ,('00000000-0000-0000-0000-000000037850','Col5','BETT New Exhibitor') ,('00000000-0000-0000-0000-000000037850','Col5','BETT Standard Exhibitor') ,('00000000-0000-0000-0000-000000037850','Col5','Exhibitor Verified') ) x ([ID],[Col],[Value]) ), ordered as ( select ID ,Col ,[Value] ,rn = row_number() over (partition by ID, Col order by [Value]) from rawdata ) select ID ,[Col1],[Col2],[Col3],[Col4],[Col5] from ordered o pivot(max([Value]) for Col in ([Col1],[Col2],[Col3],[Col4],[Col5])) pvt ;