2016-05-10 5 views
0

顧客ごとに1行しか表示されないようにデータを表示しようとしています。グループ内で選択されたクエリがすべての行を返す

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 
+0

を定義せずに二回、顧客テーブルを参照していますサブクエリ。あなたはこれをちょっとフォーマットすることによって巨額の恩恵を受けるでしょう。投稿されているので、読みにくいです。なぜこのサブクエリを使用しているのか分かりませんが、この古いスタイルの結合を使用する方法についてはこの記事をお読みください。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

答えて

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]; 
+0

Chrisさん、結果が正しくない、複数の結果を表示しています顧客ごとに –

+0

ティム\t 43.00 \t \t -981.00 \t 61.4400 ティム\t 43.00 \t \t 31.00 \t \t 3.0000 グラハム\t -200.00 \t \t -2248.00 \t 122.8800 グラハム\t -200.00 -212.00 \t \t \t \t 30.5400 –

+0

@PeterTaylorはありませんお客様の顧客に複数の残高や複数の価格またはQtysがあることを意味しますか? –

関連する問題