2017-12-13 2 views
1

Ich habe ein Problem, wo ich die sehr große SQL-Abfrage eines anderen Programmierers ändern muss. Mein Problem wird durch diese Tabelle beschrieben:2 Spaltenwerte in 2 Spalten für 1 Zeile (oder durch Komma getrennt)

+--------+-----------+---------------+-------------------------+ 
| Id | ProductId | Barcode |  CreatedAt  | 
+--------+-----------+---------------+-------------------------+ 
| 30665 | 312118 | 4054065383840 | 2017-03-13 18:37:13.130 | 
| 128600 | 312118 | 4054065383857 | 2017-05-22 13:26:48.683 | 
+--------+-----------+---------------+-------------------------+ 

So wie Sie sehen können, ein Produkt verfügt über 2 Barcodes. In unserer Abfrage muss ich diese 2 Barcodes in 2 Spalten, anstatt in 2 verschiedenen Zeilen, als barcode1 und barcode2 oder ähnlich anzeigen.

SELECT ISNULL(pp.Barcode,'') AS BarCode 
    FROM (...) c 
    LEFT JOIN ProductBarcode pp on pp.ProductId=c.VariantProductId 

Dies ist die Abfrage in Verwendung atm. Hoffentlich habe ich es gut genug erklärt. Vielen Dank im Voraus, Rasmus.

EDIT: db ist MSSQL

+0

Ich habe nun schon seit einiger Zeit mit diesem wurde das Hantieren und ich finde es sehr interessant, morgen werde ich versuchen Ursache fortsetzen ich gehe jetzt nach Hause – Tomm

Antwort

1

Verwenden pivot Abfrage in diesem Szenario sehr effektiv. Verwenden Sie mehr Zeilennummern, wenn es mehr als 2 Barcodes als barcode1,barcode2,barcode3

SELECT productid 
    ,[1] AS Barcode1 
    ,[2] AS Barcode2 
FROM (
    SELECT productid 
     ,barcode 
     ,ROW_NUMBER() OVER (
      PARTITION BY productid ORDER BY barcode 
      ) rn 
    FROM #mytable 
    ) my 
pivot(max(barcode) FOR rn IN ([1], [2])) AS pvt 
+0

Groß Lösung! +1 – Tomm

Verwandte Themen