2015-01-07 4 views
7

Ich habe eine gespeicherte Prozedur mit der folgenden Abfrage:Gruppierung und Sortierung nach mit UNION ALL

SELECT (sum(addition)) AS [COUNT], 
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date] 
FROM [TABLE_ONE] 
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate) 
AND [ServiceID][email protected] 
GROUP BY CONVERT(VARCHAR(12),CREATED,102) 
ORDER BY CONVERT(VARCHAR(12),CREATED,102) 

Ich brauche ein union all zu tun, so konnte ich Summe der Ergebnisse zu bekommen, aber aus zwei Tabellen und Ich möchte, dass das Ergebnis auf dieselbe Weise gruppiert und sortiert wird.

Dies funktioniert nicht:

SELECT (sum(addition)) AS [COUNT], 
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date] 
FROM [TABLE_ONE] 
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate) 
AND [ServiceID][email protected] 
GROUP BY CONVERT(VARCHAR(12),CREATED,102) 
ORDER BY CONVERT(VARCHAR(12),CREATED,102) 

UNION ALL 

SELECT (sum(addition)) AS [COUNT], 
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date] 
FROM [TABLE_TWO] 
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate) 
AND [ServiceID][email protected] 
GROUP BY CONVERT(VARCHAR(12),CREATED,102) 
ORDER BY CONVERT(VARCHAR(12),CREATED,102) 

ich das Gesamtergebnis bestellen möchten, und die Gruppe durch das Datum.

+0

Sie nur das Gesamtergebnis einer Vereinigung bestellen, nicht jede einzelne Abfrage. –

+0

@a_horse_with_no_name das ist genau was ich will. Ich war in der Lage, das Gesamtergebnis zu bestellen, aber ich kann es nicht gruppieren – HelpASisterOut

+0

Haben Sie versucht, eine Alias-Unterabfrage verwenden, dann durch die Alias.Feldname gruppieren? – chridam

Antwort

11

Sie konnten die group by und order by nach dem union all gelten:

SELECT (SUM(addition)) AS [COUNT], MAX([date]) AS [max_date] 
FROM (SELECT addition, CONVERT(VARCHAR(12),CREATED,102)) as [date] 
     FROM [TABLE_ONE] 
     WHERE CONVERT(VARCHAR(12),CREATED,102) 
        BETWEEN CONVERT(date,@startdate) AND 
          CONVERT(date,@enddate) 
       AND [ServiceID][email protected] 
     UNION ALL 
     SELECT addition, (CONVERT(VARCHAR(12),CREATED,102)) as [date] 
     FROM [TABLE_TWO] 
     WHERE CONVERT(VARCHAR(12),CREATED,102) 
        BETWEEN CONVERT(date,@startdate) AND 
          CONVERT(date,@enddate) 
       AND [ServiceID][email protected]) t 
GROUP BY [date] 
ORDER BY 2 
+0

Das habe ich natürlich versucht. Aber der ungültige Spaltenname 'date' wurde angezeigt. – HelpASisterOut

+0

wahrscheinlich im Zusammenhang mit den Aliasen - bearbeitet, sollte jetzt funktionieren. – Mureinik