raggruppare e girare i dati in colonne

max1974

Utente Attivo
7 Mar 2013
107
0
16
salve ragazzi come al solito sono a chiedere il vostro impagabile aiuto.
in questo caso ho una query che viene composta attraverso filtri e raggruppamenti ed alla fine estraggo un set di dati come questo
PHP:
[
{"Qta":"1","Cod_Art":"123","DDif":"Rotto"},
{"Qta":"2","Cod_Art":"123","DDif":"Spaccato"},
{"Qta":"3","Cod_Art":"123","DDif":"Deformato"},
{"Qta":"4","Cod_Art":"123","DDif":"Deformato"},

{"Qta":"1","Cod_Art":"456","DDif":"Rotto"},
{"Qta":"2","Cod_Art":"456","DDif":"Strappato"},
{"Qta":"3","Cod_Art":"456","DDif":"Deformato"},

]
lavorando su questa query che estrae il tutto tipo :
PHP:
query1= "select qr.Qta, qr.Cod_Art,qr.DDif from qr"

gradirei girare i dati a parità di Cod_Art distinti per DDif
e sommare i dati a parità di Cod_Art e di DDif
o meglio gradirei ottenere qualcosa di questo tipo:
PHP:
[
{"Cod_Art":"123","DDif_1":"Rotto","Qta_1":"1","DDif_2":"Spaccato","Qta_2":"2","DDif_3":"Deformato","Qta_3":"7","DDif_4":"Strappato","Qta_4":"0"},
{"Cod_Art":"456","DDif_1":"Rotto","Qta_1":"1","DDif_2":"Spaccato","Qta_2":"0","DDif_3":"Deformato","Qta_3":"3","DDif_4":"Strappato","Qta_4":"2"},
]
spero di essermi spiegato bene.......
ora non so se dico una fesseria ma esistono gli operatori PIVOT e UNPIVOT .......
potete aiutarmi per favore......grazie 1000 come sempre
 
Ultima modifica:

max1974

Utente Attivo
7 Mar 2013
107
0
16
salve ragazzi come al solito sono a chiedere il vostro impagabile aiuto.
in questo caso ho una query che viene composta attraverso filtri e raggruppamenti ed alla fine estraggo un set di dati come questo
PHP:
[
{"Qta":"1","Cod_Art":"123","DDif":"Rotto"},
{"Qta":"2","Cod_Art":"123","DDif":"Spaccato"},
{"Qta":"3","Cod_Art":"123","DDif":"Deformato"},
{"Qta":"4","Cod_Art":"123","DDif":"Deformato"},

{"Qta":"1","Cod_Art":"456","DDif":"Rotto"},
{"Qta":"2","Cod_Art":"456","DDif":"Strappato"},
{"Qta":"3","Cod_Art":"456","DDif":"Deformato"},

]
lavorando su questa query che estrae il tutto tipo :
PHP:
query1= "select qr.Qta, qr.Cod_Art,qr.DDif from qr"

gradirei girare i dati a parità di Cod_Art distinti per DDif
e sommare i dati a parità di Cod_Art e di DDif
o meglio gradirei ottenere qualcosa di questo tipo:
PHP:
[
{"Cod_Art":"123","DDif_1":"Rotto","Qta_1":"1","DDif_2":"Spaccato","Qta_2":"2","DDif_3":"Deformato","Qta_3":"7","DDif_4":"Strappato","Qta_4":"0"},
{"Cod_Art":"456","DDif_1":"Rotto","Qta_1":"1","DDif_2":"Spaccato","Qta_2":"0","DDif_3":"Deformato","Qta_3":"3","DDif_4":"Strappato","Qta_4":"2"},
]
spero di essermi spiegato bene.......
ora non so se dico una fesseria ma esistono gli operatori PIVOT e UNPIVOT .......
potete aiutarmi per favore......grazie 1000 come sempre
ragazzi se mi potete aiutare, ho trovato questa piccola/mezza soluzione che non è certo quello che volevo ma una parte di essa....

PHP:
SELECT qr1.Cod_Art, GROUP_CONCAT(DISTINCT qr1.DDif) AS Difetto,GROUP_CONCAT(qr1.Qta) AS Qta
FROM (select qr.Qta, qr.Cod_Art,qr.DDif from qr)qr1 GROUP BY qr1.Cod_Art
cosi facendo pero poi mi trovo i record tutti dentro una unica colonna Difetto ed una unica colonna Qta....
Avete soluzioni diverse ??
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Avete soluzioni diverse ??
prova questa query,
SQL:
SELECT Cod_Art, [Rotto], [Spaccato], [Strappato], [Deformato]
FROM
(SELECT Cod_Art, DDif, Qta FROM qr) p
PIVOT
(
    SUM(Qta)
    FOR DDif IN ( [Rotto], [Spaccato], [Strappato], [Deformato] )
) AS pvt
ORDER BY pvt.Cod_Art;

con questo risultato

1582393243742.png


ricorda che usando un linguaggio di programmazione, puoi creare la query in modo dinamico
leggendo con "distinct" le causali "[Rotto], [Spaccato], [Strappato], [Deformato]",
componendo la stringa
e componendo la query
 

max1974

Utente Attivo
7 Mar 2013
107
0
16
prova questa query,
SQL:
SELECT Cod_Art, [Rotto], [Spaccato], [Strappato], [Deformato]
FROM
(SE
[QUOTE="marino51, post: 213880, member: 23861"]
prova questa query,
[CODE=sql]SELECT Cod_Art, [Rotto], [Spaccato], [Strappato], [Deformato]
FROM
(SELECT Cod_Art, DDif, Qta FROM qr) p
PIVOT
(
    SUM(Qta)
    FOR DDif IN ( [Rotto], [Spaccato], [Strappato], [Deformato] )
) AS pvt
ORDER BY pvt.Cod_Art;

con questo risultato

Vedi l'allegato 6971

ricorda che usando un linguaggio di programmazione, puoi creare la query in modo dinamico
leggendo con "distinct" le causali "[Rotto], [Spaccato], [Strappato], [Deformato]",
componendo la stringa
e componendo la query

;[/CODE]

con questo risultato

Vedi l'allegato 6971

ricorda che usando un linguaggio di programmazione, puoi creare la query in modo dinamico
leggendo con "distinct" le causali "[Rotto], [Spaccato], [Strappato], [Deformato]",
componendo la stringa
e componendo la query
[/QUOTE]
Scusa non ho specificato..... mi serve per MYSQL
mi serve si creare i difetti in modo dinamico in quanto non so quanti possano esistere dovrei usare questa query se non erro
PHP:
SELECT DISTINCT qr1.DDif FROM(
SELECT Cod_Art, DDif, Qta FROM qr)qr1
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Scusa non ho specificato..... mi serve per MYSQL
la query che ti ho indicato dovrebbe essere in sintonia anche con mySQL, (senza modifiche) l'hai provata ?

per estrarre le cause e costruire la stringa, puoi usare più semplicemente
SQL:
SELECT distinct DDif from qr order by DDif

1582448315998.png
 

max1974

Utente Attivo
7 Mar 2013
107
0
16
la query che ti ho indicato dovrebbe essere in sintonia anche con mySQL, (senza modifiche) l'hai provata ?

per estrarre le cause e costruire la stringa, puoi usare più semplicemente
SQL:
SELECT distinct DDif from qr order by DDif

Vedi l'allegato 6972
Si Marino l'ho provata ma segnala diversi Errori...
ti elenco solo i principali:
  1. Un alias è stato trovato precedentemente. (near "PIVOT" at position 3253)
  2. Token inatteso. (near "PIVOT" at position 3253)
  3. Token inatteso. (near "(" at position 3260)
  4. Parola chiave non riconosciuta. (near "SUM" at position 3267)
  5. Token inatteso. (near "(" at position 3270)
  6. Token inatteso. (near "Qta" at position 3271)
  7. Token inatteso. (near ")" at position 3274)
  8. Parola chiave non riconosciuta. (near "FOR" at position 3281)
  9. Token inatteso. (near "DDif" at position 3285)
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
prova a sostituire le parentesi quadre con il carattere `

fai riferimento all'esempio in questo link
 
Ultima modifica:

max1974

Utente Attivo
7 Mar 2013
107
0
16
prova a sostituire le parentesi quadre con il carattere `
ho provato credo proprio che il problema sia su quella lettera p, se la rimuovo mi segnala solo 3 errori
  1. Un alias è stato trovato precedentemente. (near "pvt" at position 3375)
  2. Era atteso un alias. (near " " at position 3374)
  3. Token inatteso. (near "pvt" at position 3375)
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
ok, codice più tradizionale e meno specifico
SQL:
SELECT
  Cod_Art
, MAX(CASE WHEN DDif = 'Rotto'     THEN Qta END) 'Rotto'
, MAX(CASE WHEN DDif = 'Spaccato'  THEN Qta END) 'Spaccato'
, MAX(CASE WHEN DDif = 'Strappato' THEN Qta END) 'Strappato'
, MAX(CASE WHEN DDif = 'Deformato' THEN Qta END) 'Deformato'
FROM
  ( SELECT Cod_Art, DDif, sum(Qta) as Qta FROM qr GROUP BY Cod_Art, DDif ) t
GROUP BY Cod_Art
ORDER BY Cod_Art

1582462189379.png



puoi crearlo dinamicamente aggiungendo righe "MAX(CASE ….." per quante sono le cause esistenti, ottenendole dalla query
SQL:
SELECT distinct DDif from qr order by DDif

ps, non perdere per strada la "t" isolata in fondo alla select, NON é un errore
 
Ultima modifica:

max1974

Utente Attivo
7 Mar 2013
107
0
16
ok, codice più tradizionale e meno specifico
SQL:
SELECT
  Cod_Art
, MAX(CASE WHEN DDif = 'Rotto'     THEN Qta END) 'Rotto'
, MAX(CASE WHEN DDif = 'Spaccato'  THEN Qta END) 'Spaccato'
, MAX(CASE WHEN DDif = 'Strappato' THEN Qta END) 'Strappato'
, MAX(CASE WHEN DDif = 'Deformato' THEN Qta END) 'Deformato'
FROM
  ( SELECT Cod_Art, DDif, sum(Qta) as Qta FROM qr GROUP BY Cod_Art, DDif ) t
GROUP BY Cod_Art
ORDER BY Cod_Art

Vedi l'allegato 6974


puoi crearlo dinamicamente aggiungendo righe "MAX(CASE ….." per quante sono le cause esistenti, ottenendole dalla query
SQL:
SELECT distinct DDif from qr order by DDif

ps, non perdere per strada la "t" isolata in fondo alla select, NON é un errore
MARINO SEI UN GRANDE ......
SE non fosse per il CORONAVIRUS e per il SESSO ti darei un bacio......

Mi ci è voluto un po per eleborarla ma alla fine sembra "ok" devo solo verificare i risultati se sono giusti ma credo di si...
Ne approfitto per chiederti ultima info......quei valori null posso sostituirli con lo '0' (zero) ???
 

Allegati

  • table.png
    table.png
    58,9 KB · Visite: 294
Discussioni simili
Autore Titolo Forum Risposte Data
S Raggruppare ed estrarre data più recente MySQL 6
R Raggruppare valori array PHP 5
A Raggruppare record con stessa data PHP 13
max1974 [PHP] Raggruppare array PHP 4
MarcoGrazia [mysql][mariadb]Raggruppare query in base alla data MySQL 2
M [PHP] [HTML] Raggruppare 4 pagine web in una PHP 3
D Raggruppare dati query con php PHP 1
A Raggruppare piu' funzioni in una sola PHP 1
N Raggruppare risultati di due tabelle PHP 1
ivarello Raggruppare Query per mese PHP 1
mircop Raggruppare elementi di una tabella PHP 2
G Raggruppare record tabella PHP 1
davide1982 Raggruppare dati in categorie con group by MySQL 2
M Raggruppare dati in array per successivo insert PHP 6
X Raggruppare risultati di una query PHP 3
D Ventola CPU deve girare sempre? Hardware 0
M Form Mail: come farlo girare su server Windows? HTML e CSS 1
E Far girare applicazioni perl Programmazione 3
G come si fa a far girare le pagine PHP su Apache? PHP 1
C come far resuscitare winmx...fate girare Discussioni Varie 2
max75 query su due tabelle e dati doppioni MS Access 2
K Form che manda dati doppi PHP 1
T problemi con dati menu a tendina HTML e CSS 2
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
D Risultati diversi elaborazione dati fra localhost e Altervista PHP 0
C Creare Tabella Dati Meteo prelevandoli da dei Tags in un altro foglio PHP 27
M Invio dati database via email php PHP 0
K [php]form invio dati PHP 0
peppe0703 Come Estrarre dati da db wordpress e richiamarli in html esterno HTML e CSS 0
V dati scomparsi dal sito HTML e CSS 3
M Memorizzare i dati nei campi prima dell'invio al db PHP 4
A Stampare dati da form PHP 8
E Estrarre dati da doppia tabella, banale ma non sempre PHP 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
F Scrivere dei dati in word con php PHP 0
otto9due $_FILE non passa i dati dal form PHP 1
N dati tabella non presi PHP 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
I Assegnare dati fetch request ad una variabile globale Javascript 0
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
L Ricezione dei dati su file php da modulo html PHP 6
L inserimento form dati multipli ? PHP 0
S Leggere dati da API e visualizzarli PHP 0
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
A invio massivo dati a file php Javascript 4
M Inviare dati nel db dopo risposta alert PHP 0
A recuperare i dati passati nel post PHP 1
L Estrazione dati php Database 6
L Estrazione dati casuali non doppioni MySQL 1

Discussioni simili