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