0

这是我的脚本

SELECT a.PLUCODE as [Code],a.ITEMNAME as [Item],  
    sum(a.janQTY) AS [2012 QTY] ,sum(a.janAmt) AS [2012 AMT],  
    sum(b.janQTY) AS [2013 QTY] ,sum(b.janAmt) AS [ ]
FROM 2012_Table 
LEFT OUTER JOIN 2013_Table b  ON a.PLUCODE=b.PLUCODE 
WHERE a.CATEGORY='Category1'  
GROUP BY a.PLUCODE,a.ITEMNAME 
ORDER BY a.PLUCODE  

输出是

Code Item     2012 QTY     2012 AMT     2013 QTY  2013 AMT  
0312 ItemOne  67           837,500      21        262,500    

我在 [2012 QTY] 和 [2012 AMT] 中的输出是正确的,但是在 [2013 QTY] 和 [2013 AMT] 上是错误的,它应该是 1 的数量和 12,500 的数量,有人可以帮我什么是正确的脚本为了这。

4

3 回答 3

1

你得到一个笛卡尔结果。21 个条目 @ 12,500 = 262,500。您可能需要根据自己的优点预先查询每个,然后左连接。我假设 2013 年表的结构与 2012 年相同。

select
      PQ1.PLUCode,
      PQ1.Item,
      PQ1.[2012 QTY],
      PQ1.[2012 AMT],
      PQ2.[2013 QTY],
      PQ2.[2013 AMT]
   from
      ( select a.PLUCode, 
               a.ItemName as [Item],
               sum( a.JanQty ) as [2012 QTY],
               sum( a.JanAmt ) as [2012 AMT]
           from 2012_Table a
           where a.Category = 'Category1'
           group by a.PLUCode, a.ItemName
           order by a.PLUCode ) PQ1
      LEFT JOIN
      ( select b.PLUCode, 
               b.ItemName as [Item],
               sum( b.JanQty ) as [2013 QTY],
               sum( b.JanAmt ) as [2013 AMT]
           from 2013_Table b
           where b.Category = 'Category1'
           group by b.PLUCode, b.ItemName
           order by b.PLUCode ) PQ2
         ON PQ1.PLUCode = PQ2.PLUCode
于 2013-05-17T01:19:01.067 回答
0

因为您只按类别过滤表 A,如果 PLUCodes 跨类别重复,您将在 JOIN 的右侧包含具有指定 PLU 的所有记录。要查看发生了什么,请删除 SUM 聚合和 GROUP BY 子句,然后包括 A.Category 和 B.Category。

于 2013-05-17T01:25:11.193 回答
0

这应该会更好:

SELECT 
    a.PLUCODE as [Code],
    a.ITEMNAME as [Item],  
    sum(Case When Yr=2012 Then a.janQTY Else 0 End) AS [2012 QTY],
    sum(Case When Yr=2012 Then a.janAmt Else 0 End) AS [2012 AMT],  
    sum(Case When Yr=2013 Then a.janQTY Else 0 End) AS [2013 QTY],
    sum(Case When Yr=2013 Then a.janAmt Else 0 End) AS [2013 AMT],  
FROM (
    Select 2012 As Yr, * From 2012_Table 
 UNION ALL
    Select 2013 As Yr, * From 2013_Table
      ) a  
WHERE a.CATEGORY='Category1'  
GROUP BY a.PLUCODE,a.ITEMNAME 
ORDER BY a.PLUCODE  
于 2013-05-17T01:19:34.907 回答