TOP和DISTINCT在一个查询中

时间:2013-12-27 09:58:35

标签: sql-server sql-server-2008 tsql

我如何在一个声明中使用top和distinct我使用此但不成功。我不知道我做错了什么。

以下是我的陈述,我正在使用但是给了我例外。

 SELECT  TOP 30 * from
 (            
  SELECT   DISTINCT       
  Bill.CLIENTID,Bill.TRANDATE,Bill.TRANTYPE,Bill.DUE,Bill.AMOUNT,Bill.paid,ORDE_.INVDATE ,Bill.TRANDESC,Bill.INVNUM     
  FROM BILLING Bill  LEFT OUTER JOIN  ORDE_  ON Orde_.INVNUM = Bill.INVNUM          
 WHERE  Bill.CLIENTID = 1047  )   

2 个答案:

答案 0 :(得分:4)

缺少子查询的表别名可能是导致错误的原因。您不需要子查询,可以同时使用DistinctTop

Top(n)条记录取决于结果集的顺序。所以不要忘记明确订购你的结果。

SELECT DISTINCT TOP(30) Bill.CLIENTID,Bill.TRANDATE,Bill.TRANTYPE,Bill.DUE,Bill.AMOUNT,
                        Bill.paid,ORDE_.INVDATE ,Bill.TRANDESC,Bill.INVNUM     
FROM BILLING Bill  LEFT OUTER JOIN  ORDE_  ON Orde_.INVNUM = Bill.INVNUM          
WHERE  Bill.CLIENTID = 1047
ORDER BY ....

答案 1 :(得分:1)

这可能会有所帮助

SELECT  TOP 30 * from
 (            
  SELECT   DISTINCT       
  Bill.CLIENTID,Bill.TRANDATE,Bill.TRANTYPE,Bill.DUE,Bill.AMOUNT,Bill.paid,ORDE_.INVDATE ,Bill.TRANDESC,Bill.INVNUM     
  FROM BILLING Bill  LEFT OUTER JOIN  ORDE_  ON Orde_.INVNUM = Bill.INVNUM          
 WHERE  Bill.CLIENTID = 1047  ) Alias