2017-08-11 3 views
1

私はまだSQLをかなり新しくしています。これは、私が実行しようとしているクエリの削除されたバージョンです。このクエリでは、3つ以上のケースを持つ顧客を検索し、上位1件またはすべてのケースを表示しますが、すべてのケース番号に加えて、各行の顧客あたりのケースの総数も表示されます。T-SQL集計/グループを使用したクエリでTOP 1を選択

TOP 1サブクエリアプローチは機能しませんでしたが、必要な結果を得る別の方法がありますか?希望は意味をなさない。

ここでは、コードです:

SELECT t1.StoreID, t1.CustomerID, t2.LastName, t2.FirstName 
,COUNT(t1.CaseNo) AS CasesCount 
,(SELECT TOP 1 t1.CaseNo) 
FROM MainDatabase t1 
INNER JOIN CustomerDatabase t2 
ON t1.StoreID = t2.StoreID 
WHERE t1.SubmittedDate >= '01/01/2017' AND t1.SubmittedDate <= '05/31/2017' 
GROUP BY t1.StoreID, t1.CustomerID, t2.LastName, t2.FirstName 
HAVING COUNT (t1.CaseNo) >= 3 
ORDER BY t1.StoreID, t1.PatronID 

私は1つだけの最も最近のケースで、行とディテールや店舗に加えて、各例すべての詳細を示すいくつかの行のいずれか、それは次のようになりたいが、 ID、顧客ID、姓、名、およびケースカウント。これらについては

Data Example

+0

結果の表示例はありますか? –

+0

元の質問を更新して、返信したい列を追加しました。 – Jenn

+0

どのようなケースを選択するのかサンプルの入力と出力を提供できますか? – Eric

答えて

0

私は通常、凝集体の一時テーブルを作るのが好き:

DROP TABLE IF EXISTS #tmp; 
CREATE TABLE #tmp ( 
CustomerlD int NOT NULL DEFAULT 0, 
case_count int NOT NULL DEFAULT 0, 
case_max int NOT NULL DEFAULT 0, 
); 
INSERT INTO #tmp 
(CustomerlD, case_count, case_max) 
SELECT CustomerlD, COUNT(tl.CaseNo), MAX(tl.CaseNo) 
FROM MainDatabase 
GROUP BY CustomerlD; 

次に、あなたが戻ってあなたが数を表示する他のテーブルには、この「TMP」テーブルに参加することができますまたは最大件数をオンにします。 3つ以上のケースがある顧客に限定することができますWHERE case_count > 3

+0

TOP 1とMAXは、このケースで私に最新の結果を与えることで同じように動作しますか?もしそうなら、違いは何ですか?回答ありがとうございます! – Jenn

+1

コードを画像として投稿しないでください。投稿した画像のコードを追加しました。このメタ・ポストを参照して、回答にコードを投稿する方法https://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks – ClearLogic

+0

申し訳ありませんClearLogic、これまでの手順をすべて実行する必要はありませんSQLコードに問題があります。それをクリアしていただきありがとうございます! – AS7K

関連する問題