2017-09-20 2 views
-1

Ich versuche, meine Abfrageergebnisse in der Reihenfolge unten zu bestellen, und ich erhalte diese Fehlermeldung.Wie ordne ich Abfrageergebnisse explizit an, wenn Sie UNION verwenden?

‚ORDER BY-Elemente müssen in der Auswahlliste angezeigt werden, wenn die Anweisung eine UNION enthält, INTERSECT oder EXCEPT-Operator‘

SELECT [Category] 
FROM [dbo].[Category] 
WHERE LOWER([Category]) LIKE '%yearling%' OR LOWER([Category]) LIKE '%foal%' OR LOWER([Category]) LIKE '%in%utero%' 
    UNION 
SELECT [AcquisitionType] AS 'Category' 
FROM [dbo].[AcquisitionType] 
WHERE LOWER([AcquisitionType]) LIKE '%homebred%' 
ORDER BY CASE WHEN [Category] = 'In Utero' THEN 1 
       WHEN [Category] = 'In Utero & FS' THEN 2 
       WHEN [Category] = 'FS in Utero' THEN 3 
       WHEN [Category] = 'Foal' THEN 4 
       WHEN [Category] = 'Foal & FS' THEN 5 
       WHEN [Category] = 'FS Foal' THEN 6 
       WHEN [Category] = 'Yearling' THEN 7 
       WHEN [Category] = 'Yearling & FS' THEN 8 
       WHEN [Category] = 'FS Yearling' THEN 9 
       WHEN [Category] = 'N/a' THEN 10 
       ELSE [Category] END ASC 

ich die Ergebnisse möchte in der Reihenfolge, kehren sie in der Abfrage aufgeführt sind.

Wie mache ich das?

Ich bin ein wenig verloren auf diese eine jede Hilfe wird geschätzt.

+0

Wickeln Sie die Abfrage in eine äußere Auswahl und Reihenfolge. – xQbert

Antwort

1

eine Unterabfrage oder CTE Verwendung:

SELECT Category 
FROM (SELECT [Category] 
     FROM [dbo].[Category] 
     WHERE LOWER([Category]) LIKE '%yearling%' OR LOWER([Category]) LIKE '%foal%' OR LOWER([Category]) LIKE '%in%utero%' 
     UNION ALL 
     SELECT [AcquisitionType] AS Category 
     FROM [dbo].[AcquisitionType] 
     WHERE LOWER([AcquisitionType]) LIKE '%homebred%' 
    ) c 
ORDER BY . . .; 

Beachten Sie, dass ich die UNION mit UNION ALL ersetzt. UNION verursacht Overhead, um Duplikate zu entfernen.

Basierend auf der Logik können Ihre zwei Unterabfragen keine Duplikate zwischen ihnen haben. Es ist also nicht notwendig, Duplikate zu entfernen, es sei denn, jede Unterabfrage enthält Duplikate. Wenn ja, würde ich SELECT DISTINCT anstelle einer UNION Abfrage empfehlen.

+0

Vielen Dank, dass ein Leckerbissen funktioniert! – user2140490

Verwandte Themen