SQL Server + Incorrect TOP 1 output

2020-04-07 19:33发布

I have a portion of my query as shown below which the TOP 1 is supposed to be shared among 2 records as there are 2 outlets that has the same visit count. Apparently, the query will only return one record. How can I display the "accurate" output in this case?

Select TOP 1 (O.Name) as MostVisited
         From [Trans] T 
             INNER JOIN [Outlet] O
             On (T.Outlet_Code = O.Code)

      Where [VoidBy] IS NULL AND [VoidOn] IS NULL AND CardNo In     
            (Select [CardNo] From [Card] Where [CardNo] = 'CARDX' AND [MemberID] = @MemberId)
      Group by O.Name     
      Order by Count(T.Outlet_Code) Desc   

1条回答
老娘就宠你
2楼-- · 2020-04-07 20:36
Select TOP (1) WITH TIES (O.Name) as MostVisited
       ....

WITH TIES provides for "joint top" situations.

Example:

DECLARE @t TABLE (foo int, qty int);
INSERt @t VALUES (1, 100), (3, 200), (2, 200);

-- one row, arbitrary
SELECT TOP (1) * FROM @t ORDER BY qty DESC;

-- both rows with "TOP 1 value"
SELECT TOP (1) WITH TIES * FROM @t ORDER BY qty DESC;
查看更多
登录 后发表回答