Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Data Jadual dalam SQL dengan Menggabungkan Lajur dan Menjumlahkan Nilai?

Bagaimana untuk Mengubah Data Jadual dalam SQL dengan Menggabungkan Lajur dan Menjumlahkan Nilai?

Barbara Streisand
Barbara Streisandasal
2025-01-04 17:39:41441semak imbas

How to Pivot Tabular Data in SQL by Concatenating Columns and Summing Values?

Menukar Data Jadual kepada Jadual Pangsi Menggunakan SQL: Menggabungkan Lajur

Dalam pengurusan pangkalan data, jadual pangsi melibatkan mengubah data daripada format berorientasikan lajur kepada format berorientasikan baris, dengan berkesan "membalikkan" jadual. Artikel ini membincangkan senario di mana anda ingin memutar jadual dengan berbilang lajur ke dalam satu lajur dengan nilai yang digabungkan daripada lajur asal.

Andaikan anda mempunyai set data dengan lajur untuk ID, TYPE, SUBTYPE, COUNT dan BULAN, disusun seperti berikut:

ID    TYPE    SUBTYPE    COUNT   MONTH
1      A      Z          1       7/1/2008
1      A      Z          3       7/1/2008
2      B      C          2       7/2/2008
1      A      Z          3       7/2/2008

Objektifnya adalah untuk menukar data ini menjadi pivoted jadual, dengan lajur TYPE dan SUBTYPE disatukan ke dalam lajur baharu dan nilai COUNT dijumlahkan untuk setiap gabungan unik ID dan MONTH. Output yang dijangkakan ialah:

ID    A_Z   B_C   MONTH
1     4     0     7/1/2008
2     0     2     7/2/2008
1     0     3     7/2/2008

Penyelesaian PIVOT Pelayan SQL

SQL Server 2005 menawarkan pengendali PIVOT dan UNPIVOT yang berkuasa yang memudahkan pemasingan data. Contoh kod berikut menunjukkan teknik PIVOT:

DECLARE @sql AS varchar(max)
DECLARE @pivot_list AS varchar(max)
DECLARE @select_list AS varchar(max)

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)

Teknik SQL dinamik yang digunakan dalam kod ini secara automatik menjana pernyataan PIVOT berdasarkan gabungan berbeza nilai TYPE dan SUBTYPE, mengelakkan pengekodan keras dan membuat kod tanpa penyelenggaraan.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Jadual dalam SQL dengan Menggabungkan Lajur dan Menjumlahkan Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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