SSMS
 sql >> Teknologi Basis Data >  >> Database Tools >> SSMS

Memindahkan grup baris dengan ID yang sama ke tabel lain

Ini memang pivot, juga disebut tab silang, atau terkadang transpos

Beberapa database memiliki fasilitas khusus untuk melakukannya, yang lain Anda harus menggunakan sintaks pengelompokan. Saya lebih suka yang terakhir karena berfungsi secara universal

Jika itu penghiburan, kalian benar-benar dekat!

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

Bagaimana cara kerjanya?

Nah, jika Anda menjalankan versi non-grouped, no-max-functions yang sudah Anda miliki:

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

Kemudian Anda akan melihat data Anda menjadi "diagonal":

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

Di setiap kolom (per dim_key) hanya ada satu nilai, sisanya NULL

Menambahkan GROUP BY dan MAX menyebabkan ini runtuh menjadi satu baris karena MAX() hanya akan mengembalikan nilai dari kolom dan membuat semua null menghilang. Ini adalah properti intrinsik dari pengelompokan, bahwa data baris tidak "tetap bersama" - dalam grup DIM_KEY tertentu, MAX(DAIRY_CLM) dapat berasal dari baris mana pun, MAX(KOSHER_CLM) dapat berasal dari baris lain.. Dalam praktiknya ini berarti bahwa nilai tunggal diambil, null dibuang, semuanya muncul di baris yang sama..

..dan dengan demikian data vertikal Anda menjadi horizontal, setelah melalui diagonal



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Dari mana semua sesi SQL Server itu?

  2. SQL Server Management Studio:arti ikon

  3. Sintaks salah di dekat 'untuk' SQL Server

  4. Penjualan Luar Biasa Harian SQL, Agregat Bergulir?

  5. Hasilkan skrip dengan id baru (juga untuk dependensi)