Сортировка SQL Результаты сервера - PullRequest
0 голосов
/ 08 января 2020

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

WITH TEST AS
(
    SELECT 
        PARENT,
        NEW_SWPA_NUM,
        SWPA_DESCRIPTION,
        CASE 
           WHEN SERVICE_DATE BETWEEN '2018-07-01' AND '2018-07-31' 
              THEN 'JUL_2018'
           WHEN SERVICE_DATE BETWEEN '2018-08-01' AND '2018-08-31' 
              THEN 'AUG_2018'
           WHEN SERVICE_DATE BETWEEN '2018-09-01' AND '2018-09-30' 
              THEN 'SEP_2018'
           WHEN SERVICE_DATE BETWEEN '2018-10-01' AND '2018-10-31' 
              THEN 'OCT_2018'
           WHEN SERVICE_DATE BETWEEN '2018-11-01' AND '2018-11-30' 
              THEN 'NOV_2018'
           WHEN SERVICE_DATE BETWEEN '2018-12-01' AND '2018-12-31' 
              THEN 'DEC_2018'
           WHEN SERVICE_DATE BETWEEN '2019-01-01' AND '2019-01-31' 
              THEN 'JAN_2019'
           WHEN SERVICE_DATE BETWEEN '2019-02-01' AND '2019-02-28' 
              THEN 'FEB_2019'
           WHEN SERVICE_DATE BETWEEN '2019-03-01' AND '2019-03-31' 
              THEN 'MAR_2019'
           WHEN SERVICE_DATE BETWEEN '2019-04-01' AND '2019-04-30' 
              THEN 'APR_2019'
           WHEN SERVICE_DATE BETWEEN '2019-05-01' AND '2019-05-31' 
              THEN 'MAY_2019'
           WHEN SERVICE_DATE BETWEEN '2019-06-01' AND '2019-06-30' 
              THEN 'JUN_2019' 
        END AS MONTH_YEAR,
        SUM(TOPAY) AS PAID
    FROM 
        DE_IDENTIFIED.DBO.DE_IDENTIFIED_CLAIMS
    WHERE 
        TOPAY <> 0
        AND VOID_DATE IS NULL
        AND SERVICE_DATE BETWEEN '2018-07-01' AND '2019-06-30'
        AND COUNTY IN ('20','43','61')
    GROUP BY 
        ROLLUP(PARENT, NEW_SWPA_NUM, SWPA_DESCRIPTION,
               CASE WHEN SERVICE_DATE BETWEEN '2018-07-01' AND '2018-07-31' THEN 'JUL_2018'
      WHEN SERVICE_DATE BETWEEN '2018-08-01' AND '2018-08-31' THEN 'AUG_2018'
      WHEN SERVICE_DATE BETWEEN '2018-09-01' AND '2018-09-30' THEN 'SEP_2018'
      WHEN SERVICE_DATE BETWEEN '2018-10-01' AND '2018-10-31' THEN 'OCT_2018'
      WHEN SERVICE_DATE BETWEEN '2018-11-01' AND '2018-11-30' THEN 'NOV_2018'
      WHEN SERVICE_DATE BETWEEN '2018-12-01' AND '2018-12-31' THEN 'DEC_2018'
      WHEN SERVICE_DATE BETWEEN '2019-01-01' AND '2019-01-31' THEN 'JAN_2019'
      WHEN SERVICE_DATE BETWEEN '2019-02-01' AND '2019-02-28' THEN 'FEB_2019'
      WHEN SERVICE_DATE BETWEEN '2019-03-01' AND '2019-03-31' THEN 'MAR_2019'
      WHEN SERVICE_DATE BETWEEN '2019-04-01' AND '2019-04-30' THEN 'APR_2019'
      WHEN SERVICE_DATE BETWEEN '2019-05-01' AND '2019-05-31' THEN 'MAY_2019'
      WHEN SERVICE_DATE BETWEEN '2019-06-01' AND '2019-06-30' THEN 'JUN_2019' END)  
)
SELECT *
FROM TEST
WHERE SWPA_DESCRIPTION IS NOT NULL
ORDER BY 
    NEW_SWPA_NUM, SUBSTRING(MONTH_YEAR, 5, 4),
    DATEPART(MM, CAST(SUBSTRING(MONTH_YEAR, 1, 3) + '1900' AS DATETIME)) 

enter image description here

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вы можете добавить дополнительный предикат в логи сортировки c. Что-то вроде этого.

ORDER BY NEW_SWPA_NUM
    , CASE when MONTH_YEAR is null then 2 else 1 end
    , SUBSTRING(MONTH_YEAR,5,4)
    , DATEPART(MM,CAST(SUBSTRING(MONTH_YEAR, 1,3) + '1900' AS DATETIME)) 

Но, если честно, я бы немного упростил это. Нет необходимости сортировать по строкам.

ORDER BY NEW_SWPA_NUM
    , CASE when MONTH_YEAR is null then 2 else 1 end
    , SERVICE_DATE 
1 голос
/ 08 января 2020

не тот ответ, который вы ищете, но вы можете заменить весь оператор case на: UPPER(FORMAT(SERVICE_DATE, 'MMM_yyyy'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...