繁体   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