>Io vorrei tirare fuori i clienti che nei mese di 12 e 11 Anno
>2006 sono venuti meno di 2 volte e che nel contempo nei mesi
>10, 9, 8, 7 sono venuti più di 5 volte.
Ciao gmt,
Puoi risolvere elegantemente il problema definendo 2 Common Table Expression (CTE) che andrai a mettere in join:
USE tempdb;
CREATE TABLE dbo.T1(
ID int NOT NULL,
Anno int NOT NULL,
MESE int NOT NULL,
NVOLTE int NOT NULL
);
INSERT INTO dbo.T1 VALUES(1, 2006, 12, 1);
INSERT INTO dbo.T1 VALUES(1, 2006, 11, 2);
INSERT INTO dbo.T1 VALUES(1, 2006, 10, 6);
INSERT INTO dbo.T1 VALUES(1, 2006, 8, 2);
INSERT INTO dbo.T1 VALUES(1, 2006, 7, 3);
INSERT INTO dbo.T1 VALUES(2, 2006, 12, 1);
INSERT INTO dbo.T1 VALUES(2, 2006, 10, 1);
INSERT INTO dbo.T1 VALUES(2, 2006, 9, 6);
INSERT INTO dbo.T1 VALUES(2, 2006, 7, 2);
INSERT INTO dbo.T1 VALUES(3, 2006, 11, 1);
INSERT INTO dbo.T1 VALUES(4, 2006, 2, 7);
WITH CTE_NovDec AS
(
SELECT ID, SUM(NVOLTE) AS Visite
FROM dbo.T1
WHERE Anno = 2006
AND Mese IN(11, 12)
GROUP BY ID
HAVING SUM(NVOLTE) < 2
),
CTE_LugAgoSetOtt AS
(
SELECT ID, SUM(NVOLTE) AS Visite
FROM dbo.T1
WHERE Anno = 2006
AND Mese IN(7, 8, 9, 10)
GROUP BY ID
HAVING SUM(NVOLTE) > 5
)
SELECT
CTE1.ID
, CTE1.Visite AS VisiteNovDec
, CTE2.Visite AS VisiteLugAgoSetOtt
FROM CTE_NovDec AS CTE1
INNER JOIN CTE_LugAgoSetOtt AS CTE2
ON CTE1.Id = CTE2.ID;
/* Output:
ID VisiteNovDec VisiteLugAgoSetOtt
----------- ------------ ------------------
2 1 9
(1 row(s) affected)
*/
DROP TABLE dbo.T1;
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org