cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mengembalikan output jadual pangsi dalam MySQL?

<p>Jika saya mempunyai jadual MySQL yang kelihatan seperti ini: </p> <pra>bilangan halaman tindakan nama_syarikat ---------------------------------- CETAKAN SYARIKAT 3 CETAKAN SYARIKAT 2 CETAKAN SYARIKAT 3 Syarikat BEMAIL Syarikat B CETAKAN 2 Syarikat B CETAKAN 2 SYARIKAT B CETAKAN 1 CETAKAN SYARIKAT 3 </pra> <p>Adakah mungkin untuk menjalankan pertanyaan MySQL untuk mendapatkan output seperti ini: </p> <pra>nama_syarikat CETAK EMEL 1 halaman CETAK 2 halaman CETAK 3 halaman ------------------------------------------------- ---------- SyarikatA 0 0 1 3 SyarikatB 1 1 2 0 </pra> <p>Ideanya ialah <code>pagecount</code> boleh berbeza-beza, jadi kiraan lajur output harus mencerminkan ini, untuk setiap <kod>tindakan</code>/<code>pagecount</code> Untuk satu lajur, maka bilangan klik untuk setiap <kod>nama_syarikat</kod>. Saya tidak pasti sama ada ini dipanggil jadual pangsi, tetapi adakah sesiapa yang mencadangkan ini? </p>
P粉926174288P粉926174288476 hari yang lalu428

membalas semua(2)saya akan balas

  • P粉368878176

    P粉3688781762023-08-24 17:12:04

    Penyelesaian saya ialah menggunakan T-SQL tanpa sebarang pivot:

    SELECT
        CompanyName,  
        SUM(CASE WHEN (action='EMAIL') THEN 1 ELSE 0 END) AS Email,
        SUM(CASE WHEN (action='PRINT' AND pagecount=1) THEN 1 ELSE 0 END) AS Print1Pages,
        SUM(CASE WHEN (action='PRINT' AND pagecount=2) THEN 1 ELSE 0 END) AS Print2Pages,
        SUM(CASE WHEN (action='PRINT' AND pagecount=3) THEN 1 ELSE 0 END) AS Print3Pages
    FROM 
        Company
    GROUP BY 
        CompanyName

    balas
    0
  • P粉384244473

    P粉3842444732023-08-24 14:49:27

    Ini pada asasnya jadual pangsi.

    Tutorial yang baik tentang cara melaksanakan ini boleh didapati di sini: http:///www.artfulsoftware.com/infotree/qrytip.php?id=78

    Saya mengesyorkan membaca artikel ini dan menyesuaikan penyelesaian ini mengikut keperluan anda.

    Dikemas kini

    Selepas pautan di atas tidak lagi tersedia buat masa ini, saya merasakan keperluan untuk memberikan beberapa maklumat tambahan untuk sesiapa yang mencari di sini untuk jawapan mysql hub. Ia mempunyai banyak maklumat, saya tidak akan meletakkan semuanya di sini (atau lebih, kerana saya tidak mahu meniru pengetahuan mereka yang luas), tetapi saya akan memberikan beberapa nasihat tentang cara menangani pangsi secara umum dalam jadual Kaedah sql, mengambil peku yang mula-mula bertanya soalan sebagai contoh.

    Mungkin pautan akan kembali tidak lama lagi, saya akan memerhatikannya.

    Kaedah hamparan...

    Ramai orang hanya menggunakan MSExcel, OpenOffice atau alat hamparan lain untuk tujuan ini. Ini adalah penyelesaian yang berfungsi, hanya salin data di sana dan gunakan alat yang disediakan oleh GUI untuk menyelesaikan masalah.

    Tetapi... ini bukan masalah, malah mungkin membawa kepada beberapa keburukan seperti cara memasukkan data ke dalam hamparan, isu dengan penskalaan, dsb.

    SQL cara...

    Memandangkan bentuknya kelihatan seperti ini:

    CREATE TABLE `test_pivot` (
      `pid` bigint(20) NOT NULL AUTO_INCREMENT,
      `company_name` varchar(32) DEFAULT NULL,
      `action` varchar(16) DEFAULT NULL,
      `pagecount` bigint(20) DEFAULT NULL,
      PRIMARY KEY (`pid`)
    ) ENGINE=MyISAM;

    Lihat borang yang dia mahu sekarang:

    company_name    EMAIL   PRINT 1 pages   PRINT 2 pages   PRINT 3 pages
    -------------------------------------------------------------
    CompanyA        0       0               1               3
    CompanyB        1       1               2               0

    OK (电子邮件打印 x 页)类似于条件。主要分组是按company_name.

    Untuk menetapkan syarat, anda perlu menggunakan <代码>CASE-penyataan. Untuk mengumpulkan mengikut sesuatu, gunakan...KUMPULAN OLEHGROUP BY.

    SQL asas untuk menyediakan pangsi ini mungkin kelihatan seperti ini:

    SELECT  P.`company_name`,
        COUNT(
            CASE 
                WHEN P.`action`='EMAIL' 
                THEN 1 
                ELSE NULL 
            END
        ) AS 'EMAIL',
        COUNT(
            CASE 
                WHEN P.`action`='PRINT' AND P.`pagecount` = '1' 
                THEN P.`pagecount` 
                ELSE NULL 
            END
        ) AS 'PRINT 1 pages',
        COUNT(
            CASE 
                WHEN P.`action`='PRINT' AND P.`pagecount` = '2' 
                THEN P.`pagecount` 
                ELSE NULL 
            END
        ) AS 'PRINT 2 pages',
        COUNT(
            CASE 
                WHEN P.`action`='PRINT' AND P.`pagecount` = '3' 
                THEN P.`pagecount` 
                ELSE NULL 
            END
        ) AS 'PRINT 3 pages'
    FROM    test_pivot P
    GROUP BY P.`company_name`;

    Ini sepatutnya memberikan hasil yang diinginkan dengan cepat. Kelemahan utama pendekatan ini ialah lebih banyak baris yang anda inginkan dalam Jadual Pangsi, lebih banyak syarat yang anda perlu tentukan dalam pernyataan SQL.

    Ini juga boleh dikendalikan, jadi orang ramai cenderung menggunakan kenyataan, rutin, kaunter, dsb.

    Beberapa pautan lain mengenai topik ini:

    balas
    0
  • Batalbalas