2016-05-11 10 views
0

Ich habe Daten im Format:SQL Server Pivot Daten über die neuesten Ergebnisse

pkid, tablename, tablekeyid, attrname, attrvalue,createdate 

Daten in der Tabelle eine Wiederholung von attrname sein können wie:

1, Foo, 1, attr1, value1, 2016-01-01 02:02:02 
2, Foo, 1, attr1, value2, 2016-02-01 03:03:03 
3, Foo, 2, attr2, value3, 2016-02-01 03:03:03 

Jetzt möchte ich diese Informationen in folgendes Format mit Pivot

tablekeyid attr1 attr2 
    1  value2 NULL 
    2  NULL  value3 

Grundsätzlich sollte es die neuesten Werte ergeben.

  1. Wie dies mit Aggregatfunktion von Pivot erreicht werden kann?

  2. Kann dies auf der Basis von Tabellenname gefiltert werden?

  3. Unterstützt Entity Framework 5 (EF5) Pivot?

Antwort

1

Versuchen Sie, diese (Works in SQL Server),

SELECT tablekeyid, 
     attr1, 
     attr2 
FROM (SELECT tablekeyid, 
       attr1, 
       attr2, 
       ROW_NUMBER() 
       OVER(
        PARTITION BY tablekeyid 
        ORDER BY tablekeyid, createdate DESC) AS RN 
     FROM #Your_Pivot_Table 
       PIVOT(Max(attrvalue) 
        FOR attrname IN([attr1], 
            [attr2])) AS PivotSales)A 
WHERE A.RN = 1