SSMS
 sql >> база данни >  >> Database Tools >> SSMS

Транспониране на групи от редове със същия идентификатор в друга таблица

Това наистина е опорна точка, наричана още кръстосана таблица или понякога транспониране

Някои бази данни имат специални средства за това, други трябва да използвате синтаксис за групиране. Предпочитам последното, защото работи универсално

Ако е някаква утеха, бяхте наистина близо!

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

Как работи?

Е, ако стартирате негрупираната версия без макс функции, която вече сте имали:

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

След това ще видите, че данните ви стават "диагонални":

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

Във всяка колона (за dim_key) има само една стойност, останалите са NULL

Добавянето на GROUP BY и MAX ги кара да се свият в един ред, защото MAX() ще върне само стойността от колоната и ще накара всички нули да изчезнат. Вътрешно свойство на групирането е, че данните в редовете не "остават заедно" - в рамките на групата на конкретен DIM_KEY, MAX(DAIRY_CLM) може да идва от всеки ред, MAX(KOSHER_CLM) може да идва от всеки друг ред.. На практика това означава, че се избират единичните стойности, нулевите се изхвърлят, всички те се появяват на един и същи ред..

..и по този начин вашите вертикални данни преминаха хоризонтално, след като преминаха през диагонала



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Попълване Падащо меню със стойностите от базата данни в рамката за игра

  2. Загубен IntelliSense в SQL Server Management Studio

  3. Как да групирате бази данни в папки в SQL Server Management Studio?

  4. Местоположение за запис на файл по подразбиране на Management Studio

  5. Как да определим типовете данни на резултатите от SQL?