27. juli 2011 - 20:25Der er
4 kommentarer og 1 løsning
Problem med SQL statement
Hej,
Jeg har nedenstående SQL, som jeg order by Salg desc, LastTry men når jeg kører nedenstående er sortering ikke som ønsket.
Er der nogen som kan se hvad der er galt og rette det ? Mit bud er at det er noget ved den sum jeg laver, men kan ikke se hvad det er som går galt.
WITH CTE AS (SELECT *, NTILE(14) OVER(ORDER BY salg desc, LastTry) AS Gruppe FROM PL where campaignid = '506'), CTE2 AS (SELECT Gruppe, COUNT(*) AS TotalAntal, (SELECT SUM(Seconds) FROM cte t2 WHERE t1.Gruppe = t2.Gruppe and campaignid = '506') as AntalTimer FROM cte t1 GROUP BY Gruppe) SELECT SUBSTRING((SELECT ',' + CAST(AntalTimer AS VARCHAR(10)) FROM cte2 FOR XML PATH('')),2,20000) AS CSV
Din order by bestemmer jo kun hvilke rækker der kommer i hvilke grupper. I dine efterfølgende selects har du jo ingen order by på. Måske du skal tilføje en ORDER BY Gruppe eller noget?
Du laver 2 niveau'er af cte'er, og laver så til sidst én select fra cte2, som giver dit resultat. Men den aller sidste select benytter kun kolonnen AntalTimer, og slet ikke Gruppe eller TotalAntal kolonnerne.
Mit gæt ville være, at du ønsker at sortere efter Gruppe, og så skal du indsætte " ORDER BY Gruppe" lige efter "FROM cte2" og lige før " FOR XML PATH". Det burde i hvert fald ikke give fejl, og det gør at AntalTimer-værdierne kommer ud sorteret efter Gruppe. Men om det er det du ønsker, er kun gætterier uden du fortæller os det.
Dvs din sidste linje ser sådan ud:
SELECT SUBSTRING((SELECT ',' + CAST(AntalTimer AS VARCHAR(10)) FROM cte2 ORDER BY Gruppe FOR XML PATH('')),2,20000) AS CSV
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.