簡體   English   中英

sql server 2008會計年度順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM