[英]sql server 2008 order by fiscal year
我想在SQl Server上使用以下sql按財年進行訂購,但收到錯誤消息“無效的列名'MONTH”。 我想知道您是否可以幫助我修改以下sql。 謝謝!
SELECT 'Closed Home' AS STATUS,
right(CONVERT(VARCHAR(8), Closed_Dt, 3),5) as "MONTH",
COUNT(Home_ID) COUNT
FROM Home
GROUP BY HOME_STATUS,right(CONVERT(VARCHAR(8), Closed_Dt, 3),5)
HAVING Facility_STATUS IN ('CLOSED')
UNION
SELECT 'New Placement' AS STATUS,
right(CONVERT(VARCHAR(8), EFFECT_DT, 3),5) AS "MONTH",
COUNT(CLT_NBR) AS COUNT
FROM STATUS S
GROUP BY right(CONVERT(VARCHAR(8), EFFECT_DT, 3),5)
ORDER BY status,
case "MONTH" when '07/15' then 1
when '08/15' then 2
when '09/15' then 3
when '10/15' then 4
when '11/15' then 5
when '12/15' then 6
when '01/16' then 7
when '02/16' then 8
when '03/16' then 9
when '04/16' then 10
when '05/16' then 11
when '06/16' then 12
end
您只需將主查詢移到派生表中,然后使用MONTH列即可。
SELECT * FROM (
SELECT 'Closed Home' AS STATUS,
RIGHT(CONVERT(VARCHAR(8),Closed_Dt,3),5) AS "MONTH",
COUNT(Home_ID) COUNT
FROM Home
GROUP BY HOME_STATUS,
RIGHT(CONVERT(VARCHAR(8),Closed_Dt,3),5)
HAVING Facility_STATUS IN ('CLOSED')
UNION
SELECT 'New Placement' AS STATUS,
RIGHT(CONVERT(VARCHAR(8),EFFECT_DT,3),5) AS "MONTH",
COUNT(CLT_NBR) AS COUNT
FROM STATUS S
GROUP BY RIGHT(CONVERT(VARCHAR(8),EFFECT_DT,3),5)
) t
ORDER BY status,
CASE "MONTH"
WHEN '07/15' THEN 1
WHEN '08/15' THEN 2
WHEN '09/15' THEN 3
WHEN '10/15' THEN 4
WHEN '11/15' THEN 5
WHEN '12/15' THEN 6
WHEN '01/16' THEN 7
WHEN '02/16' THEN 8
WHEN '03/16' THEN 9
WHEN '04/16' THEN 10
WHEN '05/16' THEN 11
WHEN '06/16' THEN 12
END
SELECT 'Closed Home' AS STATUS,
right(CONVERT(VARCHAR(8), Closed_Dt, 3),5) as "MONTH",
COUNT(Home_ID) COUNT
FROM Home
GROUP BY HOME_STATUS,right(CONVERT(VARCHAR(8), Closed_Dt, 3),5)
HAVING Facility_STATUS IN ('CLOSED')
UNION
SELECT 'New Placement' AS STATUS,
right(CONVERT(VARCHAR(8), EFFECT_DT, 3),5) AS "MONTH",
COUNT(CLT_NBR) AS COUNT
FROM STATUS S
GROUP BY right(CONVERT(VARCHAR(8), EFFECT_DT, 3),5)
ORDER BY status,
case right(CONVERT(VARCHAR(8), EFFECT_DT, 3),5) when '07/15' then 1
when '08/15' then 2
when '09/15' then 3
when '10/15' then 4
when '11/15' then 5
when '12/15' then 6
when '01/16' then 7
when '02/16' then 8
when '03/16' then 9
when '04/16' then 10
when '05/16' then 11
when '06/16' then 12
end
之所以會收到錯誤,是因為您無法在CASE表達式中引用別名,即使該別名位於ORDER BY子句中也是如此。
這應該工作:
...
case right(CONVERT(VARCHAR(8), Closed_Dt, 3),5)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.