Ich möchte mehrere Zeilen in eine einzelne Zeile basierend auf der Gruppe konvertieren.Ich möchte mehrere Zeilen in eine einzige benutzerdefinierte Zeile in SQL Server konvertieren
ich die Probe Screenshot beigefügt haben:
Ich möchte mehrere Zeilen in eine einzelne Zeile basierend auf der Gruppe konvertieren.Ich möchte mehrere Zeilen in eine einzige benutzerdefinierte Zeile in SQL Server konvertieren
ich die Probe Screenshot beigefügt haben:
Nolan Antwort ist vielseitiger, wenn Sie nur diese feste Anzahl von Zeilen in einen Stat umwandeln müssen ie Spalten, warum nicht einfach?
;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
Wenn der Spaltenname nicht festgelegt ist, können Sie dynamische Skript verwenden:
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
Danke, Nolan Shang. Du hast meine Zeit gerettet – user2814814
Könnten Sie uns bitte sagen, was Sie schon versucht haben? – kodabear
Ich versuchte Pivot-Konzept. – user2814814
Bitte fügen Sie Ihren Anfragetext hier nicht Bild bitte ... – Darshak