Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso restituire l'output della tabella pivot in MySQL?

Questo fondamentalmente è una tabella pivot.

Un bel tutorial su come raggiungere questo obiettivo può essere trovato qui:http://www.artfulsoftware.com/infotree/qrytip.php?id=78">http:// www.artfulsoftware.com/infotree/qrytip.php?id=78

Ti consiglio di leggere questo post e di adattare questa soluzione alle tue esigenze.

Aggiorna

Dopo che il link sopra non è più attualmente disponibile, mi sento obbligato a fornire alcune informazioni aggiuntive per tutti voi che cercate risposte di mysql pivot qui. Aveva davvero una grande quantità di informazioni e non metterò tutto da lì qui (anche di più perché non voglio copiare la loro vasta conoscenza), ma darò alcuni consigli su come gestire il pivot tabelle generalmente in modo sql con l'esempio di peku che ha posto la domanda in primo luogo.

Forse il link tornerà presto, lo terrò d'occhio.

Il metodo del foglio di lavoro...

Molte persone usano solo uno strumento come MSExcel, OpenOffice o altri strumenti per fogli di calcolo per questo scopo. Questa è una soluzione valida, basta copiare i dati laggiù e utilizzare gli strumenti offerti dalla GUI per risolvere questo problema.

Ma... questa non era la domanda e potrebbe anche portare ad alcuni svantaggi, come come inserire i dati nel foglio di calcolo, ridimensionamento problematico e così via.

Il metodo SQL...

Dato che il suo tavolo assomiglia a questo:

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;

Ora guarda nella sua tabella desiderata:

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

Le righe (EMAIL , PRINT x pages ) assomigliano a condizioni. Il raggruppamento principale è per company_name .

Al fine di impostare le condizioni, questo richiede piuttosto l'utilizzo del CASE -dichiarazione. Per raggruppare per qualcosa, beh, usa ... GROUP BY .

L'SQL di base che fornisce questo pivot può assomigliare a questo:

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`;

Questo dovrebbe fornire il risultato desiderato molto velocemente. Il principale svantaggio di questo approccio, più righe vuoi nella tabella pivot, più condizioni devi definire nella tua istruzione SQL.

Anche questo può essere affrontato, quindi le persone tendono a utilizzare dichiarazioni preparate, routine, contatori e simili.

Alcuni link aggiuntivi su questo argomento: