Rumah > pangkalan data > tutorial mysql > Bagaimanakah SQL boleh digunakan untuk menggabungkan lajur, data pangsi dan jumlah kiraan untuk gabungan ID dan bulan yang unik?

Bagaimanakah SQL boleh digunakan untuk menggabungkan lajur, data pangsi dan jumlah kiraan untuk gabungan ID dan bulan yang unik?

DDD
Lepaskan: 2025-01-03 18:09:40
asal
654 orang telah melayarinya

How can SQL be used to concatenate columns, pivot data, and sum counts for unique ID and month combinations?

Menggabungkan Lajur dan Mengunci Data dengan SQL

Masalah:

Anda mempunyai pangkalan data dengan lajur yang mewakili ID, jenis, subjenis, kiraan dan bulan. Bagaimanakah anda boleh menukar data ini kepada format baharu yang mana jenis dan subjenis digabungkan menjadi lajur baharu dan kiraan dijumlahkan untuk setiap gabungan unik ID dan bulan?

Penyelesaian:

Untuk mencapai output yang diubah ini, anda boleh menggunakan pengendali PIVOT dalam SQL Server 2005. Operator PIVOT membenarkan anda menukar secara dinamik baris ke dalam lajur.

Coretan kod berikut menunjukkan cara menggunakan PIVOT untuk mencapai hasil yang diingini:

DECLARE @sql AS varchar(max)
DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique

SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']'
        ,@select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']'
FROM (
    SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE
    FROM stackoverflow_159456
) AS PIVOT_CODES

SET @sql = '
;WITH p AS (
    SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT]
    FROM stackoverflow_159456
    GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE
)
SELECT ID, [MONTH], ' + @select_list + '
FROM p
PIVOT (
    SUM([COUNT])
    FOR PIVOT_CODE IN (
        ' + @pivot_list + '
    )
) AS pvt
'

EXEC (@sql)
Salin selepas log masuk

Butiran Pelaksanaan:

  1. Jana Senarai Pangsi Dinamik: Kod mencipta secara dinamik senarai lajur pangsi berdasarkan gabungan unik jenis dan subjenis dalam jadual asal.
  2. Bina Pertanyaan PIVOT: Pertanyaan PIVOT utama mula-mula mencipta ungkapan jadual biasa (CTE) bernama " p" yang mengumpulkan data mengikut ID, bulan dan jenis dan subjenis yang digabungkan. Ia kemudian menjumlahkan kiraan untuk setiap kumpulan.
  3. Memindahkan Baris ke Lajur: Pengendali PIVOT digunakan pada CTE "p" untuk menukar baris ke dalam lajur. Senarai lajur pangsi dijana secara dinamik menggunakan pembolehubah @pivot_list.
  4. Mengendalikan Nilai Null (Pilihan): Dengan menggunakan fungsi COALESCE, keadaan ISNULL() dalam pembolehubah @select_list boleh digunakan untuk menggantikan nilai nol dalam lajur berpivot dengan sifar.

Melaksanakan pembolehubah @sql akan mengembalikan jadual yang diingini dengan lajur bercantum dan jumlah terjumlah. Penyelesaian ini membolehkan pengagregatan data kompleks yang cekap dan dinamik.

Atas ialah kandungan terperinci Bagaimanakah SQL boleh digunakan untuk menggabungkan lajur, data pangsi dan jumlah kiraan untuk gabungan ID dan bulan yang unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan