1

重複の可能性:
SQL: クエリ結果を任意の方法でソート/順序付けする方法は?

列を次のように並べたい (DESC 値): c、b、a。ただし、DESC の最後に、値 g,h,i (存在する場合) を表示したいと考えています。サブクエリからの列でユニオンを実行する必要がありますか?

これまでの SQL スクリプトは次のとおりです。

SELECT cars,size from car_table
GROUP BY cars, size
ORDER BY cars DESC,size ASC

Cars は、マルチソートを実行しようとしている列です。

4

4 に答える 4

2

使用できますCASE

SELECT cars,size 
from cars_table
GROUP BY cars, size
ORDER BY CASE WHEN cars in ('g','h','i') THEN 1 ELSE 0 END ASC
, cars DESC
, size ASC

ここにフィドルがあります:http://www.sqlfiddle.com/#!3/d26a8/1/0

于 2012-11-02T15:59:53.447 に答える
2
select cars, size
from car_table
group by cars, size
order by
  case 
     when cars in ('a', 'b', 'c') then cars
     else '1'
  end desc,
  case 
     when cars in ('g', 'h', 'i') then cars
     else '1'
  end

SQL フィドルの例

出力:

| CARS | SIZE |
---------------
|    c |    1 |
|    b |    1 |
|    a |    1 |
|    g |    1 |
|    h |    1 |
|    i |    1 |
于 2012-11-02T16:02:37.663 に答える
1

これを試して...

SELECT cars,size
FROM (
   SELECT cars,size, CASE SUBSTRING(cars,1,1) 
            WHEN 'g' THEN '_z' 
            WHEN 'h' THEN '_y'
            WHEN 'i' THEN '_x'
                     ELSE '' END + cars AS order_cars
   FROM   car_table
   GROUP BY cars,size
) A

ORDER BY order_cars DESC,size ASC
于 2012-11-02T16:05:32.500 に答える
1

UNION + Subquery が私の選択です。

SELECT cars, size 
FROM 
(
    SELECT 1 OrderNumber, cars, size from car_table
    GROUP BY cars, size
    WHERE cars not in ('g','h','i')
    UNION ALL
    SELECT 2, cars, size from car_table
    GROUP BY cars, size
    WHERE cars in ('g','h','i')
) aSubQuery
ORDER BY OrderNumber ASC, cars DESC, size ASC
于 2012-11-02T15:58:59.990 に答える