2017-08-11 96 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 

我想它是這個樣子,無論是一排只有最近的情況和細節或幾行顯示,除了存儲中每個案件的所有細節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