sql >> Databasteknik >  >> Database Tools >> SSMS

Överför grupper av rader med samma ID till en annan tabell

Detta är verkligen en pivot, även kallad en korstabell, eller ibland transponera

Vissa databaser har dedikerade faciliteter för att göra det, andra måste du använda en grupperingssyntax. Jag föredrar det senare eftersom det fungerar universellt

Om det är någon tröst så var du verkligen nära!

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

Hur fungerar det?

Tja, om du kör den icke-grupperade, no-max-functions versionen som du redan hade:

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

Då ser du att din data blir "diagonal":

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

I varje kolumn (per dim_key) finns bara ett värde, resten är NULL

Att lägga till GROUP BY och MAX gör att dessa kollapsar till en enda rad eftersom MAX() returnerar bara värdet från kolumnen och gör att alla nollvärden försvinner. Det är en inneboende egenskap hos en gruppering, att raddata inte "håller ihop" - inom gruppen för en viss DIM_KEY kan MAX(DAIRY_CLM) komma från vilken rad som helst, MAX(KOSHER_CLM) kan komma från vilken annan rad som helst. I praktiken innebär detta att de enskilda värdena plockas, nollorna kasseras, de visas alla på samma rad.

..och därmed gick dina vertikala data horisontellt efter att ha gått genom diagonalen



  1. phpMyAdmin 502 dålig gateway [CentOS7, nginx]

  2. phpMyAdmin:ändra standardantalet rader som visas?

  3. Importera Excel-ark till phpMyAdmin

  4. Hur installerar jag SQL Server Management Studio 2012 (SSMS) Express?