SQL选择相同的表多个总和

时间:2017-08-24 05:49:44

标签: sql subquery

我试图绕过这个问题,我确信这里的答案存在了一百万次,但后来我没有找到正确的问题。

我有一个巨大的销售表[SALES],我正在提取

SELECT DISTINCT S1.[ORDER ID], S1.SUPPLIER, SUM(S1.[ORDER TOTAL]) AS SUPPLIERTOTAL
FROM [SALES] S1 
LEFT JOIN 
    (
     Select s2.[Order ID], S2.[Supplier], S2.[Supplier Colour], SUM(S2.[Order TOTAL]) AS COLOURTOTAL
FROM [SALES]
WHERE [SALES].[SALESDATE] Between '20160101' and '20170101'
    ) AS s2
ON s1.[Order ID] = s2.[Order ID]

我把这段代码拼凑起来作为一个例子,因为我现在不是我的工作PC。我的问题是,当我重新选择工作时,它会从第一个选择产生正确的订单值。

E.G让我们说制造商是福特,总价值超过10个订单100000它正确地返回100000但是在子选择它似乎取总值并乘以表中的总行数。我试图找出数据和查询的内容,但无法看到问题。

唯一的因素是它的影响力是表没有主键但是因为我提供了连接的参照完整性而不相信会是这种情况......

任何能够回答或遇到此问题的人>

1 个答案:

答案 0 :(得分:0)

这里有点猜测,因为问题不太清楚,但我认为你正在寻找这样的事情:

SELECT S1.[ORDER ID], S1.SUPPLIER, SUM(S1.[ORDER TOTAL]) AS SUPPLIERTOTAL, SUM(S2.COLOURTOTAL) as COLOURTOTAL
FROM [SALES] S1 
LEFT JOIN 
    (
     Select s2.[Order ID], S2.[Supplier], S2.[Supplier Colour], S2.[Order TOTAL] AS COLOURTOTAL
FROM [SALES]
WHERE [SALES].[SALESDATE] Between '20160101' and '20170101'
    ) AS s2
ON s1.[Order ID] = s2.[Order ID]
GROUP BY S1.[ORDER ID], S1.SUPPLIER