2016-05-30 12 views
2

私は2つのテーブル、顧客と販売私はまだCustomersテーブルにロードされ、私が構築されていないすべてのお客様は、以下の販売から抽出する必要があり SQL Serverの2014レコードを選択

を持っています2 MAX()フィールドを追加するように依頼される前に、かなりうまくいきました。

INSERT INTO Customers (.....) 
    SELECT distinct 
     d.UserName, 
     d.postalCode, 
     d.location, 
     d.country, 
     max(d.invoiceamount) invoiceamount, 
     max(d.itemscount) itemscount, 
     d.storeID 
    FROM S.dbo.[Sales] d 
    LEFT JOIN G.dbo.Customers s ON d.Username=s.UserName 
    WHERE s.UserName IS NULL 
    AND d.username IS NOT NULL 
    GROUP BY d.UserName, d.postalCode, d.location,  
    d.country, max(d.invoiceamount), max(d.itemscount), d.storeID 

が、クエリが(最大を受け付けない)グループ内:ここ

がクエリである

別の状況では、私はCROSS APPLYを使用しますが、ここで以来、私は、ユーザー名がNULLであるレコードを抽出する必要があります1つのテーブルに...私はどのようにクエリを構築するのか分からない。

いくつかのヒントを教えてください。

+0

'GROUP BY'節で' MAX'関数とその列を削除してみましょう: 'GROUP BY d.UserName、d.postalCode、d.location、 d.country、d.storeID' –

+1

はいFelix、あなた今夜はあまりにも疲れていました。実際、私は2つの異なるメールをマージし、間違った質問を投稿しました。本当の問題は全く異なります。私は別の質問をするとおそらく良いです。元の質問に言及した場合、あなたの答えは完全に正しいです。もう一度申し訳ありません – Joe

+0

あなたが質問した後であなたの質問を完全に変更しないでください。元の質問を解決して新しい質問をしたい場合は、(1)回答を受け入れ、その答えがあなたの問題解決に役立った場合、(2)新しい質問をする必要があります。 –

答えて

2

あなたはgroup bymax()は必要ありません。

INSERT INTO Customers (.....) 
    SELECT d.UserName, d.postalCode, d.location, d.country, 
      max(d.invoiceamount) invoiceamount, 
      max(d.itemscount) itemscount, 
      d.storeID 
    FROM S.dbo.[Sales] d LEFT JOIN 
     G.dbo.Customers s 
     ON d.Username = s.UserName 
    WHERE s.UserName IS NULL AND d.username IS NOT NULL 
    GROUP BY d.UserName, d.postalCode, d.location, d.country, d.storeID; 

すべての非集計列はgroup byにする必要があります。

+0

はいゴードン、あなたは完全に正しい、今夜は疲れていた。実際には2つの異なるメールをマージし、間違った質問を投稿した。実際の問題はかなり異なる。 私は別の質問をするとおそらく良いです。あなたの答えは、元の質問に言及した場合、完全に正しいです。またすみません。 – Joe