组嵌套选定的查询返回所有行

时间:2016-05-10 14:04:09

标签: sql-server

我试图显示数据,以便每个客户只显示一行,我在尝试使用我的代码实现这一点时遇到问题,因为它返回所有记录,任何人都可以帮忙

SELECT customerOrdrs.NAME AS 'Name', 
       customerOrdrs.currentbalance - 
       Sum(COALESCE(customerOrdrs.revisedbalance, 0)) AS 'RevisedBalance', 
       sold AS 'NumberOfItemsSold' 
FROM   customers, 
       (SELECT c.NAME                   AS NAME, 
               c.balance                AS CurrentBalance, 
               i.qty                    AS RevisedBalance, 
               ( Min(s.price) * i.qty ) AS Sold 
        FROM   customers c 
               INNER JOIN sales o 
                       ON c.NAME = o.custname 
               INNER JOIN purchases i 
                       ON i.orderno = o.orderno 
               INNER JOIN contracters s 
                       ON i.item = s.item 
        GROUP  BY c.NAME, 
                  c.balance, 
                  i.qty) customerOrdrs 
GROUP  BY customerOrdrs.NAME, 
          customerOrdrs.currentbalance, 
          sold 

1 个答案:

答案 0 :(得分:0)

我不确定你的数据看起来如何,但我已经重新格式化了查询,并且有一些我已经注意到的事情。

我删除了子查询,因为我认为没有必要 - 另外你的原始查询是指两次客户表而没有定义连接

Select  [C].[Name] As [Name]
      , [CurrentBalance] = [C].[Balance]
      , [RevisedBalance] = [C].[Balance] - Sum([P].[Qty])
      , [Sold] = ( Min([CO].[Price]) * sum([P].[Qty]) )
From    [CUSTOMERS] [C]
        Inner Join [Sales] [s]
            On [C].[Name] = [s].[custName]
        Inner Join [Purchases] [P]
            On [P].[OrderNo] = [s].[OrderNo]
        Inner Join [Contracters] [CO]
            On [P].[Item] = [CO].[Item]
Group By [C].[Name]
      , [C].[Balance];