SQL 订购时按自定义案例订购
SQL Order By Custom CASE WHEN ordering
我正在尝试自定义 ORDER BY 子句,以便 'Other Companies' 始终排在最后。我不确定这里出了什么问题。这是我所有的代码。 WHERE 子句可能看起来多余,但那是因为参数被宏代码替换,其中 SQL 字符串被上传以根据日期和状态以不同方式填充。别担心。我以前在另一种情况下做过这件事,我订购了所有东西,但没有使用两个不同的列。输出表明 ORDER BY 子句中的 'AmountOfClaims' 不是有效列。有人可以帮助我吗?
SELECT
CASE
WHEN co.[CompanyName] != ''
THEN co.CompanyName
ELSE 'Unspecified Companies'
END AS CompanyName,
COUNT(co.[CompanyName]) AS [AmountOfClaims]
FROM
(SELECT
CASE
WHEN [Claims].[CompanyName] IN (SELECT TOP 10 [Claims].[CompanyName]
FROM [Claims]
WHERE Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
GROUP BY [Claims].[CompanyName]
ORDER BY COUNT([Claims].[CompanyName]) DESC)
THEN [Claims].[CompanyName]
ELSE 'Other Companies'
END AS [CompanyName]
FROM
[Claims]
WHERE
Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
) AS co
GROUP BY
co.[CompanyName]
ORDER BY
CASE
WHEN [CompanyName] = 'Other Companies'
THEN 9999
ELSE [AmountOfClaims]
END DESC
您可以将当前查询用作派生的 table 或 CTE,或者只使用 ORDER BY
:
中的 COUNT
SELECT
CASE WHEN co.[CompanyName] != '' THEN co.CompanyName ELSE 'Unspecified Companies' END AS CompanyName,
COUNT(co.[CompanyName]) AS [AmountOfClaims]
FROM
( SELECT CASE WHEN [Claims].[CompanyName] IN
( SELECT TOP 10 [Claims].[CompanyName]
FROM [Claims]
WHERE Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
GROUP BY [Claims].[CompanyName]
ORDER BY COUNT([Claims].[CompanyName]) DESC )
THEN [Claims].[CompanyName] ELSE 'Other Companies' END AS [CompanyName]
FROM [Claims]
WHERE Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
) AS co
GROUP BY co.[CompanyName]
ORDER BY CASE WHEN [CompanyName] = 'Other Companies' THEN 9999 ELSE COUNT(co.[CompanyName]) END DESC;
我正在尝试自定义 ORDER BY 子句,以便 'Other Companies' 始终排在最后。我不确定这里出了什么问题。这是我所有的代码。 WHERE 子句可能看起来多余,但那是因为参数被宏代码替换,其中 SQL 字符串被上传以根据日期和状态以不同方式填充。别担心。我以前在另一种情况下做过这件事,我订购了所有东西,但没有使用两个不同的列。输出表明 ORDER BY 子句中的 'AmountOfClaims' 不是有效列。有人可以帮助我吗?
SELECT
CASE
WHEN co.[CompanyName] != ''
THEN co.CompanyName
ELSE 'Unspecified Companies'
END AS CompanyName,
COUNT(co.[CompanyName]) AS [AmountOfClaims]
FROM
(SELECT
CASE
WHEN [Claims].[CompanyName] IN (SELECT TOP 10 [Claims].[CompanyName]
FROM [Claims]
WHERE Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
GROUP BY [Claims].[CompanyName]
ORDER BY COUNT([Claims].[CompanyName]) DESC)
THEN [Claims].[CompanyName]
ELSE 'Other Companies'
END AS [CompanyName]
FROM
[Claims]
WHERE
Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
) AS co
GROUP BY
co.[CompanyName]
ORDER BY
CASE
WHEN [CompanyName] = 'Other Companies'
THEN 9999
ELSE [AmountOfClaims]
END DESC
您可以将当前查询用作派生的 table 或 CTE,或者只使用 ORDER BY
:
COUNT
SELECT
CASE WHEN co.[CompanyName] != '' THEN co.CompanyName ELSE 'Unspecified Companies' END AS CompanyName,
COUNT(co.[CompanyName]) AS [AmountOfClaims]
FROM
( SELECT CASE WHEN [Claims].[CompanyName] IN
( SELECT TOP 10 [Claims].[CompanyName]
FROM [Claims]
WHERE Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
GROUP BY [Claims].[CompanyName]
ORDER BY COUNT([Claims].[CompanyName]) DESC )
THEN [Claims].[CompanyName] ELSE 'Other Companies' END AS [CompanyName]
FROM [Claims]
WHERE Claims.[HousingRequested] >= '2016-08-02'
AND Claims.[HousingRequested] <= '2016-08-16'
AND (Claims.[State] = NULL OR Claims.[State] >= CASE WHEN NULL IS NULL THEN ' ' ELSE 'ZZZZ' END)
) AS co
GROUP BY co.[CompanyName]
ORDER BY CASE WHEN [CompanyName] = 'Other Companies' THEN 9999 ELSE COUNT(co.[CompanyName]) END DESC;