SSMS
 sql >> Baza danych >  >> Database Tools >> SSMS

Transpozycja grup wierszy o tym samym identyfikatorze do innej tabeli

To jest rzeczywiście punkt obrotu, zwany także tabelą przestawną, a czasem transpozycją

Niektóre bazy danych mają do tego dedykowane udogodnienia, inne wymagają użycia składni grupowania. Wolę to drugie, ponieważ działa uniwersalnie

Jeśli to jakaś pociecha, byłeś bardzo blisko!

SELECT
    DIM_KEY,
    MAX(CASE WHEN ATTR_NAME = 'UPC' THEN VALUE END) as UPC,
    MAX(CASE WHEN ATTR_NAME = 'DAIRY_CLM' THEN VALUE END) as DAIRY_CLM,
    MAX(CASE WHEN ATTR_NAME = 'KOSHER_CLM' THEN VALUE END) as KOSHER_CLM,
    MAX(CASE WHEN ATTR_NAME = 'FAT' THEN VALUE END) as FAT,
    MAX(CASE WHEN ATTR_NAME = 'CALORIES' THEN VALUE END) as CALORIES
FROM demo
GROUP BY DIM_KEY

Jak to działa?

Cóż, jeśli uruchomisz wersję niezgrupowaną, bez maksymalizacji funkcji, którą już posiadałeś:

SELECT
    DIM_KEY,
    (CASE WHEN ATTR_NAME = 'UPC' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'DAIRY_CLM' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'KOSHER_CLM' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'FAT' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'CALORIES' THEN VALUE END)
FROM
   demo

Wtedy zobaczysz, że Twoje dane stają się „przekątne”:

3005, 123423, null, null...
3005, null,   N,    null...
3005, null,   null, Y   ...

W każdej kolumnie (na dim_key) jest tylko jedna wartość, reszta to NULL

Dodanie wartości GROUP BY i MAX powoduje ich zwinięcie w jeden wiersz, ponieważ funkcja MAX() zwróci tylko wartość z kolumny i sprawi, że wszystkie wartości null znikną. Jest to nieodłączna właściwość grupowania, że ​​dane wiersza nie „pozostają razem” - w grupie określonego DIM_KEY, MAX(DAIRY_CLM) może pochodzić z dowolnego wiersza, MAX(KOSHER_CLM) może pochodzić z dowolnego innego wiersza.. W praktyce oznacza to, że wybierane są pojedyncze wartości, wartości null są odrzucane i wszystkie pojawiają się w tym samym wierszu.

..i w ten sposób dane w pionie po przejściu po przekątnej poszły poziomo



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Czas wykonania LINQ to SQL jest 50 razy dłuższy niż SSMS SQL

  2. Studio zarządzania SQL Server, jak automatycznie kapitalizować

  3. Pisanie zapytania w celu wygenerowania skryptów zmieniających nazwy niektórych kolumn w całej bazie danych

  4. Prześlij plik do varbinary za pomocą SQL Management Studio

  5. Utwórz skrypt wstawiania z wybranych wyników