2016-09-30 17 views
0

私は別の列の値によって計算される2つの列を持っています。計算された列のカスタム注文

CASE 
    WHEN ACT.TotalScore > 850 THEN 'Cok Basarili' 
    WHEN ACT.TotalScore <= 850 AND ACT.TotalScore > 700 THEN 'Basarili' 
    ELSE 'Basarisiz' END as Basari, 
    CASE 
    WHEN ACT.TotalScore > 850 THEN 'rgba(123,192,67,1)' 
    WHEN ACT.TotalScore <= 850 AND ACT.TotalScore > 700 THEN 'rgba(253,244,152,1)' 
    ELSE 'rgba(243,119,54,1)' END as Renk 

成功を計算し、実際にポイントに応じて色を割り当てます。私はに従ってによりカスタムオーダーを作りたい、私は同じCASE WHENすぎ

合計出力(他の選択要素とADN句などとORDER BYなし)

+---------------+--------------+---------------------+ 
| DenetimSayisi | Basari |  Renk   | 
+---------------+--------------+---------------------+ 
|   35 | Cok Basarili | rgba(123,192,67,1) | 
|   60 | Basarisiz | rgba(243,119,54,1) | 
|   29 | Basarili  | rgba(253,244,152,1) | 
+---------------+--------------+---------------------+ 

を使用GROUP BY ON

「Basari]列と試みたが、この

ORDER BY CASE 
    WHEN ACT.TotalScore > 850 THEN 2 
    WHEN ACT.TotalScore <= 850 AND ACT.TotalScore > 700 THEN 1 
    ELSE 3 END 

このエラーを与え

Msg 8127, Level 16, State 1, Line 36 
Column "Activity.TotalScore" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause. 
Msg 8127, Level 16, State 1, Line 37 
Column "Activity.TotalScore" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause. 
Msg 8127, Level 16, State 1, Line 37 
Column "Activity.TotalScore" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause. 

私は他に何が試されるのか、どうすればこの問題を解決できるか分かりません。

+0

すべてのクエリを表示できますか? – gofr1

答えて

1

サブクエリで注文し、それ以外の注文をしてください。

SELECT 
    * 
FROM 
(
    SELECT 
     CASE 
     WHEN ACT.TotalScore > 850 THEN 'Cok Basarili' 
     WHEN ACT.TotalScore <= 850 AND ACT.TotalScore > 700 THEN 'Basarili' 
     ELSE 'Basarisiz' END as Basari, 
     CASE 
     WHEN ACT.TotalScore > 850 THEN 'rgba(123,192,67,1)' 
     WHEN ACT.TotalScore <= 850 AND ACT.TotalScore > 700 THEN 'rgba(253,244,152,1)' 
     ELSE 'rgba(243,119,54,1)' END as Renk 

     OrderByField=CASE 
     WHEN ACT.TotalScore > 850 THEN 2 
     WHEN ACT.TotalScore <= 850 AND ACT.TotalScore > 700 THEN 1 
     ELSE 3 END 
    FROM 
     Table 
) 
AS A 
ORDER BY 
    A.OrderByField 
+0

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

1

新しい番号付けロジックをグループに追加する必要があります。新しい列を作ってそれを注文する。

SELECT DenetimSayisi 
    , CASE 
     WHEN ACT.TotalScore > 850 
      THEN 'Cok Basarili' 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 'Basarili' 
     ELSE 'Basarisiz' 
     END AS Basari 
    , CASE 
     WHEN ACT.TotalScore > 850 
      THEN 'rgba(123,192,67,1)' 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 'rgba(253,244,152,1)' 
     ELSE 'rgba(243,119,54,1)' 
     END AS Renk 
    , CASE 
     WHEN ACT.TotalScore > 850 
      THEN 2 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 1 
     ELSE 3 
     END AS newColumn 
FROM yourtable 
ORDER BY CASE 
     WHEN ACT.TotalScore > 850 
      THEN 2 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 1 
     ELSE 3 
     END 

新しい注文列を実際に照会する必要がない場合は、CTEを使用して削除することができます。

;WITH cte AS (
SELECT DenetimSayisi 
    , CASE 
     WHEN ACT.TotalScore > 850 
      THEN 'Cok Basarili' 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 'Basarili' 
     ELSE 'Basarisiz' 
     END AS Basari 
    , CASE 
     WHEN ACT.TotalScore > 850 
      THEN 'rgba(123,192,67,1)' 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 'rgba(253,244,152,1)' 
     ELSE 'rgba(243,119,54,1)' 
     END AS Renk 
    , CASE 
     WHEN ACT.TotalScore > 850 
      THEN 2 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 1 
     ELSE 3 
     END AS newColumn 
FROM yourtable 
ORDER BY CASE 
     WHEN ACT.TotalScore > 850 
      THEN 2 
     WHEN ACT.TotalScore <= 850 
      AND ACT.TotalScore > 700 
      THEN 1 
     ELSE 3 
     END 
) 
Select DenetimSayisi, basari, renk from cte 
関連する問題