【问题标题】:TOP And DISTINCT in one queryTOP 和 DISTINCT 在一个查询中
【发布时间】:2014-01-14 22:04:29
【问题描述】:

如何在我正在使用但不成功的一个语句中使用 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  )   

【问题讨论】:

  • 我可以知道是什么原因让这个问题被降级@viruss mca
  • @Abishek。不是我,但我猜是因为你没有描述错误。
  • @abhisek:我没有对你的问题投反对票。
  • 您应该知道错误消息是您了解问题所在的第一个也是最好的线索。始终将其包含在问题中。

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


【解决方案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

【讨论】:

    【解决方案2】:

    缺少子查询的表别名可能是您的错误的原因。您不需要子查询,可以同时使用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 ....
    

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多