複数の行をグループに基づいて単一の行に変換する必要があります。複数の行をSQL Serverの1つのカスタマイズされた行に変換したい
私はサンプルのスクリーンショット添付しました:列名が固定されていない場合は
複数の行をグループに基づいて単一の行に変換する必要があります。複数の行をSQL Serverの1つのカスタマイズされた行に変換したい
私はサンプルのスクリーンショット添付しました:列名が固定されていない場合は
ノーランの答えしかし、あなたがする必要があるのは、固定数の行をstatに変換することだけです列のicのセットは、なぜそれを簡単に保つのですか?
;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'
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
ありがとう、Nolan Shang。あなたは私の時間を救った – user2814814
あなたはすでに試したことを教えてください。 – kodabear
ピボットのコンセプトを試しました。 – user2814814
あなたの質問文をここに追加してください画像がありません... – Darshak