2013-06-03 21 views
5

Cercando di fare qualcosa qui per creare una sorta di dati di riepilogo. Non sono sicuro che sarà il codice SQL più elegante!group by per dati di riepilogo

Ho la seguente tabella

Product    Channel   Sold 
-------------------  ---------------------- 
PC     Web    48 
Laptop    Web    2 
Speakers   Web    74 
DVDs    Web    33 
PC     Shop   1 
Laptop    Shop   1 
Speakers   Shop   1 
DVDs    Shop   5 
PC     Door-to-door 7 
Laptop    Door-to-door 16 
Speakers   Door-to-door 9 
DVDs    Door-to-door 21 
PC     Referals  7 
Laptop    Referals  16 
Speakers   Referals  9 
DVDs    Referals  21 

vorrei interrogare i dati in modo da ottenere qualcosa di rappresentare le vendite "dirette", che è un totale delle vendite sul web e negozio e ignorando in tal modo porta a porta e riferimenti

Product    Channel   Sold 
-------------------  ---------------------- 
PC    Direct   49 
Laptop   Direct   3 
Speakers  Direct   75 
DVDs   Direct   38 

Qualcuno sa come potrei fare questo? Stavo pensando a Group by (selezionare .... group by) ma tutto quello che sto provando è un disperato fallimento! lol.

Grazie in anticipo.

DS

MODIFICA!

E se volessi mettere porta-a-porta e referenze insieme come "secondario"? Questo è facilmente raggiunto? Quindi sto cercando ...

Product    Channel   Sold 
-------------------  ---------------------- 
PC    Direct   49 
Laptop   Direct   3 
Speakers  Direct   75 
DVDs   Direct   38 
PC    Secondary  14 
Laptop   Secondary  32 
Speakers  Secondary  18 
DVDs   Secondary  42 

Grazie ancora!

DS

+2

Cosa [RDBMS] (http://en.wikipedia.org/wiki/Relational_database_management_system) che si sta utilizzando? 'RDBMS' sta per * Relational Database Management System *. 'RDBMS è la base per SQL', e per tutti i moderni sistemi di database come MS SQL Server, IBM DB2, Oracle, MySQL, ecc ... –

+0

questo è MSSQL Server - grazie – dstewart101

+0

ciao di nuovo - qualcuno potrebbe forse guardare la mia modifica per favore ? ho aggiornato la domanda per avere più "gruppi". Se qualcuno potesse aiutare sarebbe bello. – dstewart101

risposta

6

Hai solo bisogno di filtrare i record channel e aggregare utilizzando SUM() sulla colonna Sold per ogni gruppo in particolare il product.

SELECT Product,  
     'Direct' Channel, 
     SUM(Sold) TOtalSold 
FROM TableName 
WHERE Channel IN ('Web','Shop') 
GROUP BY Product 

UPDATE

SELECT Product,  
     CASE WHEN Channel IN ('Web','Shop') 
       THEN 'Direct' 
       ELSE 'Secondary' 
     END Channel, 
     SUM(Sold) TOtalSold 
FROM TableName 
GROUP BY Product, 
     CASE WHEN Channel IN ('Web','Shop') 
       THEN 'Direct' 
       ELSE 'Secondary' 
     END 
ORDER BY Channel 
.210

USCITA

╔══════════╦═══════════╦═══════════╗ 
║ PRODUCT ║ CHANNEL ║ TOTALSOLD ║ 
╠══════════╬═══════════╬═══════════╣ 
║ Laptop ║ Direct ║   3 ║ 
║ Speakers ║ Direct ║  75 ║ 
║ DVDs  ║ Direct ║  38 ║ 
║ PC  ║ Direct ║  49 ║ 
║ Laptop ║ Secondary ║  32 ║ 
║ Speakers ║ Secondary ║  18 ║ 
║ DVDs  ║ Secondary ║  42 ║ 
║ PC  ║ Secondary ║  14 ║ 
╚══════════╩═══════════╩═══════════╝ 
+0

Questo è quello che sto cercando. Grazie mille. Inoltre, è la prima volta che ho visto quel sito SQLFiddle. È piuttosto buono! Grazie – dstewart101

+0

Ovviamente, la sintassi non è giusta per me, ma so cosa sto facendo ora :) – dstewart101

+1

qui, vedere la mia risposta aggiornata. –