0

I want same output shown in Output table. I have TableA and I want to pivote it and want output table as shown in image. Thankseine Tabelle in SQL Verschwenkung

Ich habe eine Tabelle #tableA

+-----+-------------+-------+------------+ 
| A | Allocations | Seats | EndDate | 
+-----+-------------+-------+------------+ 
| ABC |   450 | 23 | 2017-10-05 | 
| ABC |   23 | 765 | 2017-05-01 | 
| PQR |   54 | 34 | 2017-07-04 | 
| ABC |   234 | 45 | 2017-11-27 | 
| PQR |   987 | 76 | 2017-03-05 | 
| ABC |   76 | 65 | 2017-02-23 | 
| PQR |   89 | 324 | 2017-08-14 | 
| ABC |   45 | 34 | 2017-07-13 | 
+-----+-------------+-------+------------+ 

Welche wie unten erstellt und aufgefüllt werden kann.

CREATE TABLE #TableA 
    (
    A   VARCHAR(50), 
    Allocations INT, 
    Seats  INT, 
    EndDate  DATETIME 
); 

INSERT INTO #TableA 
VALUES  ('ABC',450,23,'2017-10-05'), 
      ('ABC',23,765,'2017-05-01'), 
      ('PQR',54,34,'2017-07-04'), 
      ('ABC',234,45,'2017-11-27'), 
      ('PQR',987,76,'2017-03-05'), 
      ('ABC',76,65,'2017-02-23'), 
      ('PQR',89,324,'2017-08-14'), 
      ('ABC',45,34,'2017-07-13'); 

A Spalte hat ABC und PQR eindeutige Werte. Datetime Spalte hat mehrere Werte.

Wie kann ich die folgende Ausgabe erhalten?

Datetime alle Datetime Werte von TableA in der Spalte.

+0

generieren Klicken Sie auf die Frage, um das Bild zu sehen. –

+0

hey danke .. Ich werde das tun –

+0

Wie ist die gewünschte Ausgabe mit der Beispieleingabe korreliert? Warum hat jeder Tag '50/27/50/12'? –

Antwort

0

Dies ist etwas, das Sie in der Berichtsschicht nicht SQL tun sollten.

Es ist in SQL möglich (demo), aber nicht etwas, das SQL entwickelt wurde.

WITH T 
    AS (SELECT A, 
       thing, 
       priority, 
       value, 
       d 
     FROM #TableA 
       CROSS APPLY (VALUES(CAST(EndDate AS DATE)))D(d) 
       CROSS APPLY (VALUES(1, 'A', NULL), 
            (2, 'Allocations', Allocations), 
            (3, 'Seats', Seats)) V(priority, thing, value)) 
SELECT thing, 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-02-23],0) AS VARCHAR(50)) END AS [2017-02-23], 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-03-05],0) AS VARCHAR(50)) END AS [2017-03-05], 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-05-01],0) AS VARCHAR(50)) END AS [2017-05-01], 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-07-04],0) AS VARCHAR(50)) END AS [2017-07-04], 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-07-13],0) AS VARCHAR(50)) END AS [2017-07-13], 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-08-14],0) AS VARCHAR(50)) END AS [2017-08-14], 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-10-05],0) AS VARCHAR(50)) END AS [2017-10-05], 
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-11-27],0) AS VARCHAR(50)) END AS [2017-11-27] 
FROM T 
PIVOT (SUM(value) FOR d in (
          [2017-02-23], 
          [2017-03-05], 
          [2017-05-01], 
          [2017-07-04], 
          [2017-07-13], 
          [2017-08-14], 
          [2017-10-05], 
          [2017-11-27])) P 
ORDER BY A, priority 

Das oben genannte befasst sich nicht einmal mit dem dynamischen Aspekt. Dazu müssten Sie eine dynamische SQL-Zeichenfolge basierend auf dem obigen und den Daten in #TableA

+0

Hey danke das war perfekt..Ich habe dyamic SQL Strings für Daten generiert..Wie kann ich das in der obigen Abfrage verwenden? und danke viel .. –

+0

Sie müssen das Ganze in eine Zeichenfolge verketten und 'exec' es. –

+0

hey Ich bekomme ein Problem in Fall wenn Anweisung beim Erzeugen von dyamischen SQL-String. Können Sie bitte helfen? –