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