2012-12-19 8 views
5

sto battendo la testa contro qualcosa che è, ne sono sicuro, molto evidente -utilizzando DatePart() con il gruppo con il comando

ho un po 'di codice SQL progettato per sommare il prezzo totale di vendita di ogni fatturare nel mio negozio e quindi organizzarlo per mese.

Per quanto ne so, questo dovrebbe restituire la somma di tutti i prezzi di vendita totali dal mese 12 (dicembre). Attualmente, questa query restituisce

135998.92 

Tuttavia, se poi cerco di mettere che in un gruppo da per farlo sputare per tutti i mesi, il numero cambia.

select SUM(totalsellingprice) from dbo.tblServiceOrders 
group by datepart(MONTH,dbo.tblServiceOrders.datereceived) 

E ho questo tavolo -

1 - 110567.70 
2 - 60059.59 
3 - 135998.92 
4 - 63089.22 
5 - 102287.01 
6 - 71088.68 
7 - 149102.10 
8 - 67722.65 
9 - 67122.45 
10 - 64234.82 
11 - 7542.05 
12 - 130461.10 

ci sono 12 righe, che suona bene a me (12 mesi in un anno), ma l'ultima fila è 130461.

Come è è possibile che la riga 12 della seconda ricerca non corrisponda a ciò che ho fatto nella prima ricerca? Mi sento come se mi mancasse qualcosa di ovvio ma non posso per la vita di me capire cosa.

Qualsiasi e tutti gli aiuti saranno molto apprezzati!

+0

Puoi dirmi il tipo di dati e il formato della colonna "datereceived"? – Mari

+1

Sembra a me ... forse qualcuno ha venduto per 5537,82 $ nel momento in cui esegui la query usando 'where'? (laf) –

risposta

13

ho capito:

Vostri criteri è molto confuso in quanto non include la colonna MESE:

Se si farebbe Fatto questo, avresti capito che la tua query non è ordinata da MONTH e quindi, il 12 MESE viene restituito come terza riga della tua query.

;)

select SUM(totalsellingprice) from dbo.tblServiceOrders 
group by datepart(MONTH,dbo.tblServiceOrders.datereceived) 
order by datepart(MONTH,dbo.tblServiceOrders.datereceived) 

E per favore, non fare riferimento al indice di riga di scegliere quale mese è legato a cui somma. E dovrebbe essere una buona idea anche discriminare l'anno (se necessario).

+0

Haha. Oddio. Mi sono grattato la testa cercando di capire se potevo pensare a uno scenario in cui GROUP BY stava eliminando le righe ... – DeanGC

+0

+1 per aver menzionato l'anno –

+0

@DeanGC: Hahaha anche io, ho fatto un sacco di test! >, <' –

0

Esegui questo e vedere che cosa fa ...

select dateadd(month, datediff(month, 0, datereceived), 0), 
     Sum(totalsellingprice) 
from dbo.tblServiceOrders 
group by dateadd(month, datediff(month, 0, datereceived), 0) 
Problemi correlati