2017-09-20 5 views
-1

質問の結果を下記の順序で注文しようとしていますが、このエラーメッセージが表示されています。UNIONを使用しているときにクエリ結果を明示的に並べ替えるにはどうすればよいですか?

「ステートメントは、UNIONが含まれている場合、ORDER BY項目が選択リストに表示される必要があり、INTERSECTまたはEXCEPT演算子」

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 

私は結果は、それらがクエリに記載されている順序で返したいです。

どうすればよいですか?

私は少しこの1つに失われているので、任意の助けに感謝します。私はUNION ALLUNIONを置き換え

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 . . .; 

お知らせ:

+0

外部の選択と順序でクエリをラップします。 – xQbert

答えて

1

は、サブクエリまたはCTEを使用してください。 UNIONは重複を取り除くためにオーバーヘッドを掛けます。

ロジックに基づいて、2つのサブクエリはそれらの間に重複を持つことはできません。したがって、各サブクエリに重複がないかぎり、重複を削除する必要はありません。その場合は、UNIONというクエリではなく、SELECT DISTINCTをお勧めします。

+0

ありがとうございました。 – user2140490

関連する問題