2016-09-05 2 views
0

Hallo ich mit SQL arbeite und ich brauche Hilfe bei der folgenden Tabelle:Benötigen Sie eine Zeile als Spalte

  ID_enterprise | ID_workplace | Service | Address | N_Workers | 
      1    1   X   A1   50  
      1    1   Y   A2   50 
      2    2   Z   A3   10 
      2    3   X   A4   5 
      3    4   Z   A5   5 

Und ich brauche dieses Format:

  ID_enterprise | X | Y | Z | Address1 | Address 2 | Address 3 | Address 4 | AddressN | N_Workers1 | N_Workers2 | N_Workers3 | N_WorkersN | T_Workers 
      1   1 1 0  A1  A2   NULL  NULL  NULL  50   50   NULL   NULL  100 
      2   1 0 1  A3  A4   NULL  NULL  NULL  10   5   NULL   NULL  15 
      3   0 0 1  A5  NULL  NULL  NULL  NULL  5   0   NULL   NULL  5   

Die AdresseN und N_WorkersN sind für Unternehmen mit mehr als 3 Workcentern (das größte hat 9). Also ich denke, dass ich etwas Dynamisches brauche ...

Sorry über mein Englisch und meine schlechte Erklärung! Danke!

+2

Es klingt wie Sie nach einer dynamischen Pivot-Abfrage suchen. Versuchen Sie mal, Google zu googeln, und wenn Sie nicht weiterkommen, dann kommen Sie hierher zurück. Welche Version von SQL verwenden Sie? –

+0

Danke für die Hilfe. Ich werde nach Dynamic Pivot Query googlen! – Quiron

Antwort

0

Sie können PIVOT verwenden, hier ist eine Beispielabfrage mit einer Teilmenge der von Ihnen bereitgestellten Daten.

WITH input_data AS (
    SELECT 1 AS id, 'X' AS service FROM DUAL 
    UNION ALL 
    SELECT 1 AS id, 'Y' AS service FROM DUAL 
    UNION ALL 
    SELECT 2 AS id, 'Z' AS service FROM DUAL 
    UNION ALL 
    SELECT 2 AS id, 'X' AS service FROM DUAL 
    UNION ALL 
    SELECT 3 AS id, 'Z' AS service FROM DUAL 
) 
SELECT * FROM input_data 
PIVOT (
    MAX(service) FOR service IN ('X' AS x, 'Y' AS y, 'Z' AS z) 
) 
+0

Vielen Dank! Ich werde es versuchen! Wenn ich Erfolg habe, werde ich es dir sagen! – Quiron

Verwandte Themen