PDA

Visualizza la versione completa : query singola


Nicogazzola
24-12-2008, 09:12
ciao a tutti! devo inserire in una tabella dei dati divisi per trimestre ed il totale annuo... l'unica soluzione mi sembra fare 5 query, una per periodo... ma la cosa mi sembra pesante... come posso fare? vi ringrazio! ciao

123delphi321
24-12-2008, 09:24
ciao

ad occhio mi sembra non ci siano elementi suffiecienti per poterti rispondere....

prova almeno a postare la struttura della tabella in cui sono memorizzati i dati

Nicogazzola
24-12-2008, 09:35
le tabelle sono varie... sostanzialmente io con un select mi trovo la lista degli importi (ma penso che la natura del dato non sia rilevante, una lista di numeri) filtrati per anno, ad esempio: 12000 - 12/05/1999 ecc.... le condizioni di filtro nel where sono obbligatoriamente su tutti i campi del select oppure si puņ distinguere?

123delphi321
24-12-2008, 09:41
si, si puo' distinguere.

posta la query... hai provato con group by?

Nicogazzola
24-12-2008, 09:52
SELECT DISTINCT sum(rows.importo) AS importo, aziende.name AS azienda
FROM ricezioni AS ric JOIN ricezioni_rows
AS rows on ric.id = rows.parent_id JOIN accounts AS aziende on aziende.id = ric.account_id
WHERE aziende.account_gx >= 270210231 AND aziende.account_gx <= 270210231 AND ric.data_ricez >= '2000-01-01'
AND ric.data_ricez <= '2000-12-31' GROUP BY aziende.name

in questo caso, come si vede, ho diviso per totale anno...

123delphi321
24-12-2008, 10:14
allora.... io 'proverei' utilizzando il comando CASE (http://www.1keydata.com/sql/sql-case.html),


SELECT DISTINCT
sum(rows.importo) AS importo,
aziende.name AS azienda,
CASE ric.data_ricez
WHEN mese<=3 THEN 1
WHEN mese<=6 THEN 2
WHEN mese<=9 THEN 3
WHEN mese<=12 THEN 4
ELSE 5
END Trimestre
FROM ricezioni AS ric
...


devi aggiustare il controllo del mese della data.....
se ti riesce credo che con questa tecnioca potresti avere i dati gia' divisi per trimestre

Nicogazzola
24-12-2008, 10:19
ti ringrazio tanto. ora provo subito!

Nicogazzola
24-12-2008, 10:57
ma come posso fare per vedere le casistiche in output?

ora come ora la query č:

SELECT DISTINCT sum(rows.acq_qta_fatt) AS fatturato, aziende.name AS nome, ric.data_ricez=
CASE
WHEN ric.data_ricez < '2000-03-31' THEN 1
ELSE 2
END
FROM ricezioni AS ric JOIN ricezioni_rows
AS rows on ric.id = rows.parent_id JOIN accounts AS aziende on aziende.id = ric.account_id
LEFT JOIN obbiettivi_acquisto AS obiettivi ON obiettivi.s_conto_for = aziende.account_gx
WHERE aziende.account_gx >= 270210231 AND aziende.account_gx <= 270210231 AND ric.data_ricez >= '2000-01-01'
AND ric.data_ricez <= '2000-12-31' GROUP BY aziende.name, ric.data_ricez

devo inserire i casi 1 e 2 da qualche parte?

123delphi321
24-12-2008, 13:44
mi spieghi cosa significa questo:
aziende.account_gx >= 270210231 AND aziende.account_gx <= 270210231
???


SELECT DISTINCT
sum(rows.acq_qta_fatt) AS fatturato,
aziende.name AS nome,
CASE
WHEN ric.data_ricez < '2000-03-31' THEN 1
WHEN ric.data_ricez < '2000-06-30' THEN 2
WHEN ric.data_ricez < '2000-09-30' THEN 3
WHEN ric.data_ricez < '2000-12-31' THEN 4
ELSE 5
END as trimestre
FROM ricezioni AS ric
LEFT JOIN ricezioni_rows AS rows on ric.id = rows.parent_id
LEFT JOIN accounts AS aziende on aziende.id = ric.account_id
LEFT JOIN obbiettivi_acquisto AS obiettivi ON obiettivi.s_conto_for = aziende.account_gx
WHERE
aziende.account_gx >= 270210231 AND
aziende.account_gx <= 270210231 AND
ric.data_ricez >= '2000-01-01' AND
ric.data_ricez <= '2000-12-31'
GROUP BY aziende.name, ric.data_ricez, trimestre

Loading