【问题标题】:Tsql union of sub queries that each require an ORDER BY clause子查询的 Sql 联合,每个子查询都需要一个 ORDER BY 子句
【发布时间】:2011-07-06 19:08:26
【问题描述】:

您好,如果此问题的答案在其他地方,我深表歉意。我环顾四周,找不到简单的解决方案。我有一个要运行的查询。我不关心联合集的顺序,只关心内部查询返回正确的数据,即“最大区域”。

(SELECT TOP 5 * FROM [geo].[Areas] WHERE CountryID = @CountryID AND (TypeID = 'City')
ORDER BY [ShapeArea] DESC) as BiggestCities
    UNION ALL
(SELECT TOP 5 * FROM [geo].[Areas] WHERE CountryID =  @CountryID AND (TypeID = 'National park')
ORDER BY [ShapeArea] DESC) as BiggestParks

但是 T-sql 不会让我在子查询上使用 ORDER BY,只能在整个联合上使用......感谢您的帮助!我真的希望不必创建临时表或类似的东西。

【问题讨论】:

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


    【解决方案1】:

    试试这个

    SELECT * 
      FROM (SELECT TOP 5 * 
              FROM [geo].[Areas] 
             WHERE CountryID = @CountryID 
               AND (TypeID = 'City')
          ORDER BY [ShapeArea] DESC) as BiggestCities
    UNION ALL
    SELECT * 
      FROM (SELECT TOP 5 * 
              FROM [geo].[Areas] 
             WHERE CountryID =  @CountryID 
               AND (TypeID = 'National park')
          ORDER BY [ShapeArea] DESC) as BiggestParks
    

    【讨论】:

    • 太棒了!正是我需要的。穆哈斯·格拉西亚斯 :)
    • de nada,它又快又脏,我以为别人会有更优雅的东西,还没来得及尝试@Joe Stefanelli 的
    • @PaulMcCowat 你能告诉我如何使用 SQLiteQueryBuilder 的 buildUnionSubQuery 方法和 buildUnionQuery 方法和内容提供者构建这个查询吗?
    【解决方案2】:
    SELECT t.* /* Excluding RowNum */
      FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY TypeID ORDER BY [ShapeArea] DESC) as RowNum
              FROM [geo].[Areas]
              WHERE CountryID = @CountryID 
                AND TypeID IN ('City', 'National park')
           ) t
      WHERE t.RowNum <= 5
    

    【讨论】:

    • 正是我要发布的内容——尽管由于 SELECT * 将返回“新”列 RowNum,所以我输入了旧的“避免 SELECT * 建议。
    • @Phillip:绝对同意避免使用SELECT *,但这是我在不知道列名的情况下能做的最好的事情。另请注意,我包含了一条注释,指出外部 SELECT 应排除 RowNum 列。
    • 这比较慢。我已经知道了,但无论如何我都进行了测试——这和保罗的回答——并确认总体计划会更慢。
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多