sql-server - 对 SQL Server 结果进行排序
问题描述
我正在尝试排序以显示最早的month_year
第一个,但在每个时间段结束时仍然有空的总显示。当我没有总数时,这有效,但现在无效,因为 null 位于顶部
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))
解决方案
不是您正在寻找的答案,但您可以将整个 case 语句替换为:UPPER(FORMAT(SERVICE_DATE, 'MMM_yyyy'))
推荐阅读
- android - 如何使用 Kotlin Android 在 Retrofit 中传递 body?
- database - laravel 中查询的意外结果
- java - 在 Heroku 上部署 Spring Boot 时出现 Google api 重定向问题
- arrays - SC2207 来自 subshell 的 Bash 数组分配未按预期拆分
- python - 为什么 pip 不安装最新版本的软件包,即使 PyPI 上有更新版本?
- c# - 如何更改 selenium 远程 Web 驱动程序中的用户代理
- jquery - jquery 用于在 woocommerce 中显示每个下拉列表
- php - 目标空白不适用于 wordpress
- sql - 尝试将日期时间数据输入日期列,日期数据有两种不同的格式
- node.js - 为未经授权的用户模糊照片