2016-07-01 7 views
0

Hallo erstmalig mit SQL Pivots arbeiten. Ich habe eine Tabelle aus einer SQL-Abfrage wie diese unten aus der SQL-Abfrage zurück.SQL Pivot mit Duplikaten und gleichen zwei ersten Spalten

Serial | SerialV2 | MeterType | MeterAmount 
A1  | A11  | gas  | 12 
A1  | A11  | odometer | 1252 
A2  | A22  | gas  | 10 
A2  | A22  | odometer | 105 
A1  | A12  | gas  | 1 
A1  | A12  | odometer | 17542 

Ich würde es so

Serial | SerialV2 | gas | odometer 
A1  | A11  | 12 | 1252 
A1  | A12  | 1 | 17542 
A2  | A22  | 10 | 105 

zu sein, was ich bisher geschrieben ist

select serial, serialV2, [gas], [odometer] 
from (
//sql query here 
) query 
PIVOT 
(
sum(meterAmount) 
FOR [meterType] in ([gas], [odometer]) 
) as p 
order by serial 

Will ich Problem mit der Aufzeichnung haben, die die gleiche Seriennummer hat, aber nicht die V2 Seriennummer?

Was würde auch passieren, wenn ein weiterer duplizierter Datensatz angezeigt würde, d. H. Seriell und seriell V2 ist derselbe?

Danke!

+0

gmoney Ihre Anfrage korrekt ist, gibt es Ihnen die gewünschten Ergebnisse. Die eine Sache, die ich notiere, ist in der from() Query ... Sie können tatsächlich tun, aus Tabellenname, wenn es eine Tabelle ist, um es ein wenig für Sie zu vereinfachen – Matt

+0

Die Abfrage im Inneren ist ziemlich komplex Ich habe dieses Beispiel erstellt, um Ihnen zu danken für die Köpfe aber! Weißt du, was passieren würde, wenn ich eine doppelte Zeile hätte, d. H. (Seriell und seriell v2 sind identisch mit einer anderen Zeile) – gmoney

+1

@gmoney Es würde die Werte summieren. – shawnt00

Antwort

1

Hier ist ein alternativer Ansatz mit conditional aggregation:

select serial, serialV2, 
    sum(case when metertype = 'gas' then meteramount end) as gas, 
    sum(case when metertype = 'odometer' then meteramount end) as odometer 
from (
    //sql query here 
) query 
group by serial, serialV2