2016-06-24 6 views
0

У меня есть небольшая колонка, которая используется для представления времени. Я написал следующий код, чтобы получить результат в зависимости от того, что время:SQL GROUP BY alias

 CASE 
    WHEN 
     CONVERT(varchar, t0.U_ORC_BE_ProdTime, 108) BETWEEN '07:00:00' AND '19:00:00' THEN '1' 
    ELSE '2' 
END AS [Shift], 
    --If time is between 7am and 7pm then Shift 1, else Shift 2 

Я хочу, чтобы вставить его в запрос у меня уже есть, а затем его также группа сдвига.

SELECT 

T6.U_ORC_BE_StyleName AS [Style Name], 
T0.[ItemCode], 
STUFF(T0.[ItemCode], 1, 6, '') AS [Shortened ItemCode], 
SUM(T0.[PlannedQty]) AS [Planned Qty], 
SUM(T0.CmpltQty) AS [Actual Qty], 
SUM(T0.CmpltQty) - SUM(T0.PlannedQty) AS [Qty Difference], 
SUM(T5.U_ORC_BE_HECTOLITER * T0.CmpltQty) AS [Total Hectoliters], 

CASE 
    WHEN [.......] 
    THEN 
    WHEN [.......] 
    THEN 
END AS [Line], 

T0.U_ORC_BE_ProdDate AS [Date Produced] 

    FROM [.......] 

    GROUP BY T6.U_ORC_BE_StyleName, T0.[ItemCode], T5.Code , T0.U_ORC_BE_ProdDate 

Он продолжает выдавать ошибку, хотя я подозреваю, что это связано с попыткой группировать имя псевдонима.

«Каждое выражение GROUP BY должно содержать по крайней мере один столбец, который не является внешней ссылкой».

+0

Какая ошибка возникает? –

+0

Извините, я отредактировал вопрос, включив в него ошибку. – coblenski

+0

Где находится 'T0.U_ORC_BE_ProdDate' в select, если вы его не выбрали, а затем удалить из' Group by' –

ответ

2

Чтобы группировать вычисляемый столбец, как оператор case, вы также должны включить этот оператор в группу. Например:

SELECT 
    CASE ... END AS CaseStatement, 
    [YourColumns] 
FROM YourTable 
GROUP BY CASE ... END 
+0

Кажется, это так очевидно! Большое спасибо. – coblenski

1

Как описано в ошибке, вы не можете группировать имя псевдонима. Вам придется копировать весь случай, когда после вашей группы.

select 
.... 
group by 
T6.U_ORC_BE_StyleName, T0.[ItemCode], T5.Code , T0.U_ORC_BE_ProdDate, 
CASE 
    WHEN [.......] 
    THEN 
    WHEN [.......] 
    THEN 
END 
+0

Когда мне это дается, это имеет смысл. Спасибо за помощь. – coblenski