Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Konwertuj wiersze na kolumny za pomocą „Pivot” w SQL Server

Jeśli używasz SQL Server 2005+, możesz użyć PIVOT funkcja przekształcania danych z wierszy w kolumny.

Wygląda na to, że będziesz musiał użyć dynamicznego sql, jeśli tygodnie są nieznane, ale łatwiej jest zobaczyć poprawny kod, używając na początku wersji zakodowanej na sztywno.

Po pierwsze, oto kilka szybkich definicji tabel i danych do wykorzystania:

CREATE TABLE yt 
(
  [Store] int, 
  [Week] int, 
  [xCount] int
);
    
INSERT INTO yt
(
  [Store], 
  [Week], [xCount]
)
VALUES
    (102, 1, 96),
    (101, 1, 138),
    (105, 1, 37),
    (109, 1, 59),
    (101, 2, 282),
    (102, 2, 212),
    (105, 2, 78),
    (109, 2, 97),
    (105, 3, 60),
    (102, 3, 123),
    (101, 3, 220),
    (109, 3, 87);

Jeśli Twoje wartości są znane, zakodujesz zapytanie:

select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

Zobacz demonstrację SQL

Jeśli potrzebujesz dynamicznie wygenerować numer tygodnia, Twój kod będzie wyglądał następująco:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(Week) 
                    from yt
                    group by Week
                    order by Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT store,' + @cols + ' from 
             (
                select store, week, xCount
                from yt
            ) x
            pivot 
            (
                sum(xCount)
                for week in (' + @cols + ')
            ) p '

execute(@query);

Zobacz demonstrację SQL.

Wersja dynamiczna generuje listę week liczby, które należy przekonwertować na kolumny. Oba dają ten sam wynik:

| STORE |   1 |   2 |   3 |
---------------------------
|   101 | 138 | 282 | 220 |
|   102 |  96 | 212 | 123 |
|   105 |  37 |  78 |  60 |
|   109 |  59 |  97 |  87 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonaj procedurę składowaną w innej procedurze składowanej na serwerze SQL

  2. Najszybsza metoda wstawiania, aktualizowania i wybierania programu SQL Server

  3. Usunąć klucz obcy bez znajomości nazwy ograniczenia?

  4. Zapytanie SQL Server:szybkie z dosłownym, ale wolne z zmienną

  5. Wyzwalacz SQL Server wstawia wartości z nowego wiersza do innej tabeli