У меня возникли проблемы с этой формулой. Я пытаюсь сделать данные компактными, используя оператор case для группировки с использованием продолжительности в 15 минут, 30 минут, 1 час и т. Д. Однако всякий раз, когда я запускаю код ниже. Он не выполняет агрегирование на основе даты транзакции, области, кода, группы продолжительности.

SELECT
    [Area],
    CONVERT(VARCHAR(10),[Time],111) as [Transaction Date],
    [Code],
    CASE        
        WHEN [Duration] >= 7200 THEN '5 Days or More'
        WHEN [Duration] >= 5760 AND [Duration] < 7200 THEN '4 Days'
        WHEN [Duration] >= 4320 AND [Duration] < 5760 THEN '3 Days'
        WHEN [Duration] >= 2880 AND [Duration] < 4320 THEN '2 Days'
        WHEN [Duration] > 1380 AND [Duration] < 2880 THEN '1 Days'
        ELSE '0 Days' 
    END AS 'Duration Group',
    SUM ([#ofSales]) AS [Volume]
FROM 
    my Table
WHERE 
    [ID] NOT LIKE '8787%' 
    AND [#ofSales] >= 1
GROUP BY 
    [Time], [Area], [Code],
    CASE        
        WHEN [Duration] >= 7200 THEN '5 Days or More'
        WHEN [Duration] >= 5760 AND [Duration] < 7200 THEN '4 Days'
        WHEN [Duration] >= 4320 AND [Duration] < 5760 THEN '3 Days'
        WHEN [Duration] >= 2880 AND [Duration] < 4320 THEN '2 Days'
        WHEN [Duration] > 1380 AND [Duration] < 2880 THEN '1 Days'
        ELSE '0 Days' 
    END
ORDER BY 
    [Transaction Date], [Area], [Duration Group]
0
Tadashii 26 Ноя 2021 в 17:22

1 ответ

Лучший ответ

Вы можете получить ошибку во фразе "порядок по" из-за использования столбца. Но попробуйте следующее, это может быть проще, если использовать подзапрос.

SELECT [Transaction_Date], [Area], [Duration_Group], SUM ([#ofSales]) AS [Volume]from (
     SELECT
       [Area]
      ,CONVERT(VARCHAR(10),[Time],111) as [Transaction_Date]
      ,[Code]
      ,[#ofSales]
      ,CASE         
        WHEN [Duration] >= 7200 THEN '5 Days or More'
        WHEN [Duration] >= 5760 AND [Duration] < 7200 THEN '4 Days'
        WHEN [Duration] >= 4320 AND [Duration] < 5760 THEN '3 Days'
        WHEN [Duration] >= 2880 AND [Duration] < 4320 THEN '2 Days'
        WHEN [Duration] > 1380 AND [Duration] < 2880 THEN '1 Days'
        ELSE '0 Days' 
    END AS Duration_Group
  FROM my Table
  WHERE [ID] Not Like '8787%' AND [#ofSales] >= 1
 ) tt
Group BY [Transaction_Date], [Area], [Duration_Group]   
ORDER BY [Transaction_Date], [Area], [Duration_Group]

Не используйте пробелы в именах столбцов

0
Rami Bancosly 26 Ноя 2021 в 17:36
Это сработало. Спасибо.
 – 
Tadashii
26 Ноя 2021 в 17:43