2016-04-07 14 views
1

Ich habe Daten wie unten Beispiel.T-SQL - Get Zeilen als Spalte (Pivot funktioniert nicht)

VariableName variableValue 
row_count  5326  
FileName  [OrderFeed_20160406.tsv] 
TableName  OrderFeed 
TableID   1 
row_count  788 
FileName  [CategoryFeed_20160406.tsv] 
TableName  Category 
TableID   2 
row_count  224 
FileName  [ItemFeed_20160406.tsv] 
TableName  Item 
TableID   3 
row_count  991 
FileName  [ContactFeed_20160406.tsv] 
TableName  Contact 
TableID   4 

ich zeigen möchte, dass Daten wie unten:

row_count | FileName     | TableName |TableID 
5326  |[OrderFeed_20160406.tsv] |OrderFeed |1 
788  |[CategoryFeed_20160406.tsv]|Category |2 

Als ich PIVOT verwenden, ist es Arbeit, aber Reihenfolge der Daten ändert. Ich meine, wenn [OrderFeed_20160406.tsv] 5326 Zeilen hat und TableId davon ist 1 in Wirklichkeit, aber nach Pivot [OrderFeed_20160406.tsv] hat 788 Zeilen und erhalten unterschiedliche TableID als.

Mein Muster-Pivot-Code ist unten:

select row_count, 
[FileName], 
TableID, 
TableName from (
select VariableName , VariableValue,row_number() over(partition by VariableName 
         order by VariableValue) seq 
from DailyLogs 
) d 
PIVOT (count(VariableValue) for variableName in ( row_count, 
FileName, 
TableID, 
TableName)) 
piv; 
+0

Das ist ein seltsames Datenbank-Design. Woher weißt du, welche Zeilen miteinander verbunden sind? – Tobb

+0

Stimmen Sie mit @Tobb überein, Ihre Zielantwort sollte Ihr Tabellendesign sein. –

+0

leider gibt es keine Verbindung zwischen den Zeilen. Es ist Log-Tabelle, und ja, es ist sehr seltsam – arslan

Antwort

0

Versuchen Sie, diesen

DECLARE @TABLE TABLE (row_no INT IDENTITY(1,1), variableName NVARCHAR(200) 
       ,variableValue NVARCHAR(200)) 
INSERT INTO @TABLE 
SELECT * FROM DailyLogs 

SELECT [row_count],[FileName],[TableName],[TableID] 
FROM (
    SELECT variableName,variableValue, 
     ROW_NUMBER() OVER(PARTITION BY variableName ORDER BY row_no) AS ROWNO FROM @TABLE 
    ) T PIVOT(MAX(VariableValue) FOR 
      variableName IN ([FileName],[row_count],[TableID],[TableName])) PIV 
ORDER BY [TableID] 

Result is : 

row_count FileName     TableName TableID 
5326  [OrderFeed_20160406.tsv] OrderFeed 1 
788   [CategoryFeed_20160406.tsv] Category 2 
224   [ItemFeed_20160406.tsv]  Item  3 
991   [ContactFeed_20160406.tsv] Contact  4 
+0

Vielen Dank, aber es gab kein korrektes Ergebnis :( – arslan

+0

Abfrage geändert, Ergebnis auch enthalten, PLZ Check –

+0

Es hat funktioniert. Das ist erstaunlich. Vielen Dank – arslan