Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Data Jadual dalam SQL dengan Menggabungkan Lajur dan Menjumlahkan Nilai?
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!