Self Join Issue,2017年左右语法不正确

问题描述 投票:0回答:1

我有一个数据库,其中包含从2017年1月到现在的每月发货量。我想按年将年度发货数量放在唯一的列中(以操纵PowerBI可视化)。

第一个查询(无年度列)有效:

SELECT   FORMAT(frcst.InvDate, 'yyyyMM') AS period_name
       , MONTH(frcst.InvDate) AS month_num
       , YEAR(frcst.InvDate) AS year_num
       , frcst.LineCode
       , frcst.ClassCode
       , cc_type
       , rank
       , keycust1
       , keycust2
       , keycust3
       , sales1
       , sales2
       , sales3
       , SUM(GrossSales) AS gross_sales
       , SUM (QtyShip + ( (QtyOrd - QtyShip) * 0.25) ) AS frcst_qty
  FROM FrcstFactTbl frcst
  JOIN account_hierarchy_lu account
    ON frcst.AccountNumber = account.account_number
  JOIN cc_type_lu cct
    ON frcst.ClassCode = cct.class_code
  JOIN pop_code_lu pop
    ON frcst.PartNumber = pop.PartNumber
GROUP BY InvDate, frcst.LineCode, frcst.ClassCode, cc_type, rank, keycust1, keycust2, keycust3, sales1, sales2, sales3
ORDER BY InvDate

我在下面的查询中收到一个错误(带有年度列)。错误:

消息102,级别15,状态1,第12行,'2017'附近的语法不正确。

SELECT   MONTH(frcst.InvDate) AS mnth
       , frcst.LineCode
       , frcst.ClassCode
       , cc_type
       , rank
       , keycust1
       , keycust2
       , keycust3
       , sales1
       , sales2
       , sales3
       , SUM(ship2017.GrossSales) AS 2017gross_sales
       , SUM(ship2017.QtyShip + ( (ship2017.QtyOrd - ship2017.QtyShip) * 0.25) ) AS 2017_frcst_qty
       , SUM(ship2018.GrossSales) AS 2018gross_sales
       , SUM(ship2018.QtyShip + ( (ship2018.QtyOrd - ship2018.QtyShip) * 0.25) ) AS 2018_frcst_qty
       , SUM(ship2019.GrossSales) AS 2019_gross_sales
       , SUM(ship2019.QtyShip + ( (ship2019.QtyOrd - ship2019.QtyShip) * 0.25) ) AS 2019_frcst_qty
       , SUM(ship2020.GrossSales) AS ship2020_gross_sales
       , SUM(ship2020.QtyShip + ( (ship2020.QtyOrd - ship2017.QtyShip) * 0.25) ) AS 2020_frcst_qty
  FROM FrcstFactTbl frcst
  JOIN account_hierarchy_lu account
    ON frcst.AccountNumber = account.account_number
  JOIN cc_type_lu cct
    ON frcst.ClassCode = cct.class_code
  JOIN pop_code_lu pop
    ON frcst.PartNumber = pop.PartNumber
  JOIN FrcstFactTbl ship2017
    ON frcst.mnth = ship2017.mnth
   AND frcst.LineCode = ship2017.LineCode
   AND frcst.ClassCode = ship2017.ClassCode
   AND frcst.keycust3 = ship2017.keycust3
  JOIN FrcstFactTbl ship2018
    ON frcst.mnth = ship2018.mnth
   AND frcst.LineCode = ship2018.LineCode
   AND frcst.ClassCode = ship2018.ClassCode
   AND frcst.keycust3 = ship2018.keycust3
  JOIN FrcstFactTbl ship2019
    ON frcst.mnth = ship2019.mnth
   AND frcst.LineCode = ship2019.LineCode
   AND frcst.ClassCode = ship2019.ClassCode
   AND frcst.keycust3 = ship2019.keycust3
  JOIN FrcstFactTbl ship2020
    ON frcst.mnth = ship2020.mnth
   AND frcst.LineCode = ship2020.LineCode
   AND frcst.ClassCode = ship2020.ClassCode
   AND frcst.keycust3 = ship2020.keycust3
 WHERE YEAR(ship2017.InvDate) = '2017'
   AND YEAR(ship2018.InvDate) = '2018'
   AND YEAR(ship2019.InvDate) = '2019'
   AND YEAR(ship2020.InvDate) = '2020'
GROUP BY mnth, frcst.LineCode, frcst.ClassCode, cc_type, rank, keycust1, keycust2, keycust3, sales1, sales2, sales3
ORDER BY mnth 

任何建议都值得赞赏。

sql sql-server join self-join
1个回答
0
投票

分别用2017gross_sales2018gross_sales2019gross_sales替换gross_sales_2017gross_sales_2018gross_sales_2019

最佳做法是,以字母字符开头列名。

© www.soinside.com 2019 - 2024. All rights reserved.