-1
A
回答
1
諾蘭的回答是更通用的,但是如果你只需要將這些固定數量的行轉換爲統計數據一組專欄,爲什麼不保持簡單?
;WITH cteYourData
(
ColumnName,
Value,
NewValue,
NV_Decode,
OldValue,
OV_Decode
)
AS
(
SELECT 'HearingDetailsId', 379785, 379785, NULL, NULL, NULL
UNION ALL SELECT 'Informal', 379785, 5641, 'karthick.devaraj', 863, 'Prabhu'
UNION ALL SELECT 'Formal', 379785, 5641, '5641', NULL, NULL
)
SELECT *
INTO #YourData
FROM cteYourData;
SELECT HearingDetailsId = hd.Value,
[Informal NewValue] = inf.NewValue,
[Informal NV_Decode] = inf.NV_Decode,
[Informal OldValue] = inf.OldValue,
[Informal OV_Decode] = inf.OV_Decode,
[Formal NewValue] = frm.NewValue,
[Formal NV_Decode] = frm.NV_Decode,
[Formal OldValue] = frm.OldValue,
[Formal OV_Decode] = frm.OV_Decode
FROM #YourData AS hd
LEFT OUTER JOIN #YourData AS inf
ON hd.Value = inf.Value
AND inf.ColumnName = 'Informal'
LEFT OUTER JOIN #YourData AS frm
ON hd.Value = frm.Value
AND frm.ColumnName = 'Formal'
WHERE hd.ColumnName = 'HearingDetailsId'
0
CREATE TABLE #tt(ColumnName varchar(100),[value] int,NewValue int,NV_Decode varchar(100),OldVaue int,OV_Decode varchar(100))
INSERT INTO #tt
VALUES('HearingDetailsid',3797685,3797685,NULL,NULL,NULL)
,('Informal',3797685,5641,'karthick. devaral',863,'Prabhu')
,('Formal',3797685,5641,'5641',null,null)
SELECT * FROM (
SELECT [value] AS [HearingDetailsid], c.col_title,c.col_value FROM #tt AS t
CROSS APPLY(VALUES (ColumnName+'NewValue',CONVERT(VARCHAR,NewValue)),(ColumnName+'NV_Decode',CONVERT(VARCHAR,NV_Decode))
,(ColumnName+'OldVaue',CONVERT(VARCHAR,OldVaue)),(ColumnName+'OV_Decode',CONVERT(VARCHAR,OV_Decode))
) c(col_title,col_value)
WHERE t.ColumnName!='HearingDetailsid'
) AS t
PIVOT(MAX(t.col_value) FOR t.col_title IN (InformalNewValue,InformalNV_Decode,InformalOldVaue,InformalOV_Decode,FormalNewValue
,FormalNV_Decode,FormalOldVaue,FormalOV_Decode)) p
如果列名不固定,你可以使用動態腳本:
DECLARE @col VARCHAR(max),@sql VARCHAR(max)
SELECT @col=ISNULL(@col+',','')+ t.ColumnName+'NewValue,'+t.ColumnName+'NV_Decode,' + t.ColumnName+'OldVaue,'+t.ColumnName+'OV_Decode'
FROM #tt AS t WHERE t.value!=t.NewValue
--PRINT @col
SET @sql='SELECT * FROM (
SELECT [value] AS [HearingDetailsid], c.col_title,c.col_value FROM #tt AS t
CROSS APPLY(VALUES (ColumnName+''NewValue'',CONVERT(VARCHAR,NewValue)),(ColumnName+''NV_Decode'',CONVERT(VARCHAR,NV_Decode))
,(ColumnName+''OldVaue'',CONVERT(VARCHAR,OldVaue)),(ColumnName+''OV_Decode'',CONVERT(VARCHAR,OV_Decode))
) c(col_title,col_value)
WHERE t.value!=t.NewValue
) AS t
PIVOT(MAX(t.col_value) FOR t.col_title IN ('[email protected]+')) p'
EXEC(@sql)
HearingDetailsid InformalNewValue InformalNV_Decode InformalOldVaue InformalOV_Decode FormalNewValue FormalNV_Decode FormalOldVaue FormalOV_Decode ---------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ 3797685 5641 karthick. devaral 863 Prabhu 5641 5641 NULL NULL
+0
謝謝,諾蘭尚。你節省了我的時間 – user2814814
相關問題
- 1. SQL Server:將多行從內部連接錶轉換爲單行
- 2. 將多個SQL行轉換爲一行
- 3. 將列轉換爲SQL Server中的行
- 4. 將多個分隔字段轉換爲SQL Server中的行
- 5. SQL Server - 將多個列轉換爲多個行
- 6. SQL Server:將行轉換爲一行
- 7. 將行轉換爲SQL中的列的自定義處理
- 8. 將行轉換爲列SQL Server,T-SQL
- 9. 在SQL Server中將單個列轉換爲多個
- 10. SQL Server將行轉換爲列
- 11. SQL Server將行轉換爲新表
- 12. 將行轉換爲列SQL Server 2012
- 13. 將行轉換爲列sql server
- 14. SQL Server將列轉換爲行
- 15. SQL Server- PIVOT表。將行轉換爲列
- 16. 我如何將行轉換爲sql server 2005中的列
- 17. 將單個值轉換爲多行
- 18. 如何將多行轉換爲單行?
- 19. 將多行bash轉換爲單行
- 20. 如何將多行轉換爲單行
- 21. 行轉換爲sql server 2005中的列?
- 22. 將扁平化的單行轉換爲多行Oracle SQL
- 23. sql將行轉換爲sql server 2008r2中的列
- 24. 將「\ n」轉換爲SQL Server中的實際換行符
- 25. 如何將單行SQL結果轉換爲多行?
- 26. SQL問題:如何將多個結果轉換爲單行?
- 27. 在Excel中將多個單元格從多行轉換爲單個行
- 28. SQL Server:將多行值分成單行
- 29. SQL將多列轉換爲行
- 30. SQL - 將一對多轉換爲一行
請問您能告訴我們您已經嘗試過了嗎? – kodabear
我嘗試了樞軸概念。 – user2814814
請在這裏添加您的查詢文字不需要圖片... – Darshak