簡體   English   中英

SQL:SQL查詢中的Union All時出錯

[英]SQL : Error at Union All in sql query

以下是我的查詢。 我正在使用UNION ALL,因為當MONTH列既不是NULL又是NULL時,我需要帶數據。 但這不起作用,我想知道為什么。

    SELECT metricname,
         careertrackid,
         monthyrname,
         SUM(metricvalue) AS metricval,
         CASE
           WHEN MONTH IS NOT NULL THEN CONVERT(VARCHAR,YEAR) + LPAD(CONVERT(VARCHAR,MONTH),2,'0')
           ELSE CONVERT(VARCHAR,acnfiscalyear) + CONVERT(VARCHAR,acnfiscalquarter)
         END AS dispmonth
  FROM atp_9375_forecast,
       vspforecasts
  WHERE ibfcollectionid = vspforecasts.ibfid
  AND   (YEAR>= 2018 AND MONTH>= 7)
  GROUP BY careertrackid,
           metricname,
           dispmonth,
           monthyrname
  ORDER BY dispmonth

UNION ALL

SELECT metricname,
         careertrackid,
         monthyrname,
         SUM(metricvalue) AS metricval,
         CASE
           WHEN MONTH IS NOT NULL THEN CONVERT(VARCHAR,YEAR) + LPAD(CONVERT(VARCHAR,MONTH),2,'0')
           ELSE CONVERT(VARCHAR,acnfiscalyear) + CONVERT(VARCHAR,acnfiscalquarter)
         END AS dispmonth
  FROM atp_9375_forecast,
       vspforecasts
  WHERE ibfcollectionid = vspforecasts.ibfid
  AND   (YEAR>= 2018 AND MONTH IS NULL)
  GROUP BY careertrackid,
           metricname,
           dispmonth,
           monthyrname
  ORDER BY dispmonth

還有什么其他方法仍然可以應用MONTH過濾器,但是應該同時包含NULL和NOT NULL,因為MONTH列在表中同時具有這兩個值。

示例結果這是期望的結果,但這僅在MONTH列包含NULL和NOT NULL時出現

{"201806":"0.00","201807":"0.00","201808":"0.00","201809":"0.00","201810":"0.00","201811":"0.00","FY19Q2":"0.00","FY19Q3":"0.00","FY19Q4":"0.00","FY20Q1":"0.00"}

從您的問題中,您的union all兩個查詢幾乎相同,僅需在month進行判斷,就無需使用UNION ALL只需在WHERE使用添加條件(MONTH>= 7 OR MONTH IS NULL)

SELECT metricname,
     careertrackid,
     monthyrname,
     SUM(metricvalue) AS metricval,
     CASE
       WHEN MONTH IS NOT NULL THEN CONVERT(VARCHAR,YEAR) + LPAD(CONVERT(VARCHAR,MONTH),2,'0')
       ELSE CONVERT(VARCHAR,acnfiscalyear) + CONVERT(VARCHAR,acnfiscalquarter)
     END AS dispmonth
FROM atp_9375_forecast INNER JOIN 
   vspforecasts ON ibfcollectionid = vspforecasts.ibfid
WHERE (YEAR>= 2018 AND (MONTH>= 7 OR MONTH IS NULL))
GROUP BY careertrackid,
       metricname,
       dispmonth,
       monthyrname
ORDER BY dispmonth

注意

我建議避免使用,逗號連接表,因為它是一種舊樣式,可以使用join代替它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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