-
rsocol
-
-
-
Joined on 10-03-2006
-
Bucuresti
-
sysadmin
-
-
|
Re: Ajutor optimizare interogare
Dacă te interesează o soluţie pentru SQL 2000, atunci poţi să faci ceva de genul: SELECT Produs, SUM(CASE WHEN DAY(Data)=1 THEN 1 ELSE 0 END) AS [1], SUM(CASE WHEN DAY(Data)=2 THEN 1 ELSE 0 END) AS [2], SUM(CASE WHEN DAY(Data)=3 THEN 1 ELSE 0 END) AS [3], SUM(CASE WHEN DAY(Data)=4 THEN 1 ELSE 0 END) AS [4], SUM(CASE WHEN DAY(Data)=5 THEN 1 ELSE 0 END) AS [5], SUM(CASE WHEN DAY(Data)=6 THEN 1 ELSE 0 END) AS , SUM(CASE WHEN DAY(Data)=7 THEN 1 ELSE 0 END) AS [7], SUM(CASE WHEN DAY(Data)=8 THEN 1 ELSE 0 END) AS , SUM(CASE WHEN DAY(Data)=9 THEN 1 ELSE 0 END) AS [9], SUM(CASE WHEN DAY(Data)=10 THEN 1 ELSE 0 END) AS [10], SUM(CASE WHEN DAY(Data)=11 THEN 1 ELSE 0 END) AS [11], SUM(CASE WHEN DAY(Data)=12 THEN 1 ELSE 0 END) AS [12], SUM(CASE WHEN DAY(Data)=13 THEN 1 ELSE 0 END) AS [13], SUM(CASE WHEN DAY(Data)=14 THEN 1 ELSE 0 END) AS [14], SUM(CASE WHEN DAY(Data)=15 THEN 1 ELSE 0 END) AS [15], SUM(CASE WHEN DAY(Data)=16 THEN 1 ELSE 0 END) AS [16], SUM(CASE WHEN DAY(Data)=17 THEN 1 ELSE 0 END) AS [17], SUM(CASE WHEN DAY(Data)=18 THEN 1 ELSE 0 END) AS [18], SUM(CASE WHEN DAY(Data)=19 THEN 1 ELSE 0 END) AS [19], SUM(CASE WHEN DAY(Data)=20 THEN 1 ELSE 0 END) AS [20], SUM(CASE WHEN DAY(Data)=21 THEN 1 ELSE 0 END) AS [21], SUM(CASE WHEN DAY(Data)=22 THEN 1 ELSE 0 END) AS [22], SUM(CASE WHEN DAY(Data)=23 THEN 1 ELSE 0 END) AS [23], SUM(CASE WHEN DAY(Data)=24 THEN 1 ELSE 0 END) AS [24], SUM(CASE WHEN DAY(Data)=25 THEN 1 ELSE 0 END) AS [25], SUM(CASE WHEN DAY(Data)=26 THEN 1 ELSE 0 END) AS [26], SUM(CASE WHEN DAY(Data)=27 THEN 1 ELSE 0 END) AS [27], SUM(CASE WHEN DAY(Data)=28 THEN 1 ELSE 0 END) AS [28], SUM(CASE WHEN DAY(Data)=29 THEN 1 ELSE 0 END) AS [29], SUM(CASE WHEN DAY(Data)=30 THEN 1 ELSE 0 END) AS [30], SUM(CASE WHEN DAY(Data)=31 THEN 1 ELSE 0 END) AS [31], COUNT(*) AS Total FROM Facturi f INNER JOIN Detail m ON f.ID=m.ID_Factura INNER JOIN Produse p ON p.ID=m.ID_Produs WHERE Data BETWEEN '20060801' AND '20060831' GROUP BY Produs ORDER BY ProdusDacă ai SQL Server 2005, atunci poţi să foloseşti PIVOT: SELECT Produs, [1],[2],[3],[4],[5], ,[7], ,[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31], [1]+[2]+[3]+[4]+[5]+ +[7]+ +[9]+[10]+[11]+[12]+[13]+[14]+[15]+[16]+[17]+[18]+[19]+[20]+[21]+[22]+[23]+[24]+[25]+[26]+[27]+[28]+[29]+[30]+[31] as Total FROM ( SELECT Produs, DAY(Data) AS Ziua FROM Facturi f INNER JOIN Detail m ON f.ID=m.ID_Factura INNER JOIN Produse p ON p.ID=m.ID_Produs WHERE Data BETWEEN '20060801' AND '20060831' ) AS X PIVOT (COUNT(Ziua) FOR Ziua IN ( [1],[2],[3],[4],[5], ,[7], ,[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31] )) AS P ORDER BY ProdusRăzvan PS. Evident, semnele alea stupide reprezintă numerele care ar trebui să fie acolo. Nu ştiu cum fac ca să scriu un 6 între paranteze pătrate fără să apară drăcuşorul respectiv...
|
|