Saya telah membaca hal-hal di tabel MS pivot dan saya masih mengalami masalah untuk mendapatkan ini dengan benar.
Saya memiliki tabel temp yang sedang dibuat, kita akan mengatakan bahwa kolom 1 adalah nomor Toko, dan kolom 2 adalah angka minggu dan terakhir kolom 3 adalah total dari beberapa jenis. Juga angka Minggu dinamis, nomor toko statis.
Store Week xCount
------- ---- ------
102 1 96
101 1 138
105 1 37
109 1 59
101 2 282
102 2 212
105 2 78
109 2 97
105 3 60
102 3 123
101 3 220
109 3 87
Saya ingin ini keluar sebagai tabel pivot, seperti ini:
Store 1 2 3 4 5 6....
-----
101 138 282 220
102 96 212 123
105 37
109
Menyimpan angka di samping dan minggu di bagian atas.
sql
sql-server
pivot
pivot-table
Lynn
sumber
sumber
Jawaban:
Jika Anda menggunakan SQL Server 2005+, maka Anda dapat menggunakan
PIVOT
fungsi untuk mengubah data dari baris menjadi kolom.Sepertinya Anda harus menggunakan sql dinamis jika minggu-minggu tidak diketahui tetapi lebih mudah untuk melihat kode yang benar menggunakan versi hard-kode pada awalnya.
Pertama, berikut adalah beberapa definisi tabel cepat dan data untuk digunakan:
Jika nilai-nilai Anda diketahui, maka Anda akan mengkode-keras kueri:
Lihat Demo SQL
Maka jika Anda perlu membuat angka minggu secara dinamis, kode Anda akan:
Lihat Demo SQL .
Versi dinamis, menghasilkan daftar
week
angka yang harus dikonversi ke kolom. Keduanya memberikan hasil yang sama:sumber
cte3 AS (select ... )
maka Anda memiliki logika yang didefinisikan di atas dengan@cols
dan@query
... ada kesalahan.` Nama objek tidak valid 'cte3'.` bagaimana Anda memperbaikinya. -STUFF(...)
sebelumnya (atau yangXML PATH
baik). Untuk kepentingan pembaca lain, semua yang dilakukan adalah bergabung dengan nama kolom dan memotong koma utama. Catatan saya pikir yang berikut ini sedikit lebih sederhana: pilih @cols = (PILIH PERPINDAHAN QUOTENAME (Minggu) + ',' dari urutan yt oleh 1 UNTUK XML PATH ('')) set @cols = SUBSTRING (@cols, 1, LEN ( @ cols) - 1) ... menggantigroup by
bydistinct
danorder by 1
dan secara manual memotong koma yang suffiks !Ini untuk # minggu dinamis.
Contoh lengkap di sini: SQL Dynamic Pivot
sumber
Saya telah mencapai hal yang sama sebelumnya dengan menggunakan subqueries. Jadi jika tabel asli Anda disebut StoreCountsByWeek, dan Anda memiliki tabel terpisah yang mencantumkan ID Toko, maka akan terlihat seperti ini:
Salah satu keuntungan dari metode ini adalah bahwa sintaks lebih jelas dan membuatnya lebih mudah untuk bergabung ke tabel lain untuk menarik bidang lain ke dalam hasil juga.
Hasil anekdotal saya adalah menjalankan kueri ini selama beberapa ribu baris diselesaikan dalam waktu kurang dari satu detik, dan saya benar-benar memiliki 7 subquery. Tetapi seperti disebutkan dalam komentar, lebih mahal secara komputasional untuk melakukannya dengan cara ini, jadi berhati-hatilah dalam menggunakan metode ini jika Anda mengharapkannya berjalan pada sejumlah besar data.
sumber
Inilah yang dapat Anda lakukan:
DEMO
sumber
Saya sedang menulis sebuah sp yang dapat berguna untuk tujuan ini, pada dasarnya sp ini memutar semua tabel dan mengembalikan tabel baru yang diputar atau mengembalikan hanya set data, ini adalah cara untuk menjalankannya:
harap dicatat bahwa dalam parameter @agg nama kolom harus bersama
'['
dan parameter harus diakhiri dengan koma','
SP
Ini adalah contoh eksekusi:
maka
Select * From ##TEMPORAL1PVT
akan kembali:sumber
sumber
Berikut ini adalah revisi dari jawaban @Tayrn di atas yang mungkin membantu Anda memahami berputar sedikit lebih mudah:
Ini mungkin bukan cara terbaik untuk melakukan ini, tapi inilah yang membantu saya membungkus kepala saya di sekitar bagaimana cara memutar tabel.
ID = baris yang ingin Anda putar
MY_KEY = kolom yang Anda pilih dari tabel asli yang berisi nama kolom yang ingin Anda putar.
VAL = nilai yang ingin Anda kembalikan di bawah setiap kolom.
MAX (VAL) => Dapat diganti dengan fungsi agregat lainnya. SUM (VAL), MIN (VAL), DLL ...
sumber
Berikan Anda beberapa ide bagaimana database lain menyelesaikan masalah ini.
DolphinDB
juga memiliki dukungan bawaan untuk pivoting dan sql terlihat jauh lebih intuitif dan rapi. Sederhana seperti menentukan kolom kunci (Store
), kolom berputar (Week
), dan metrik yang dihitung (sum(xCount)
).DolphinDB adalah basis data kinerja tinggi berbentuk kolom. Perhitungan dalam biaya demo serendah 546 ms pada laptop xell dell (i7 cpu). Untuk mendapatkan detail lebih lanjut, silakan merujuk ke manual DolphinDB online https://www.dolphindb.com/help/index.html?pivotby.html
sumber