2017-01-05 4 views

Antwort

1

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' 
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 

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 


+0

Danke, Nolan Shang. Du hast meine Zeit gerettet – user2814814

Verwandte Themen