我有两列,由另一列中的值计算。
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
他们计算成功并根据实际分数为他们指定颜色。
ON GROUP BY
我也使用相同的CASE WHEN
总输出(其他选择元素和子句等,没有顺序)
+---------------+--------------+---------------------+
| 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) |
+---------------+--------------+---------------------+
我想根据'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 :(得分: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
答案 1 :(得分:1)
在子查询中计算您的订单,并在其之外订购。
select id, least(val1, val2, <etc>)
from myTable
where mid=1