代码之家  ›  专栏  ›  技术社区  ›  Tom A RRUZ

SQL Server-需要基于嵌套秩返回数据

  •  1
  • Tom A RRUZ  · 技术社区  · 14 年前

    我们有一个特性,它允许我们创建SQL,根据嵌套查询从一个表中获取数据,嵌套查询根据另一个表中的匹配条件过滤记录。现在,我们需要能够基于nexted查询的前x个记录而不是所有匹配的记录从第一个表中获取数据。例如,我们想要

    SELECT Name, Address, City, State, Zip 
      FROM CUSTOMERS
     WHERE Customer_Location IN (SELECT TOP 100 
                                        CustomerID, 
                                        Rank() OVER PARTITION BY TID ORDER BY TerritoryName DESC) AS 'RANK'
                                   FROM Territories
                                  WHERE Nation = 'Canada')
    

    但是到目前为止,使用IN语句是不好的,因为我们只能返回一列,而使用EXISTS并不是有效的,因为EXISTS所做的只是在任何字段匹配时返回“TRUE”(即使我们将链接放回主查询)。有人知道我怎样才能让它工作吗?谢谢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Joe Stefanelli    14 年前

    您想加入嵌套查询。我对适当的连接条件做了一个假设,但它是这样的:

    SELECT Name, Address, City, State, Zip 
    FROM CUSTOMERS C
    INNER JOIN (SELECT TOP 100 CustomerID, TerritoryName, 
                Rank() OVER PARTITION BY TID ORDER BY TerritoryName DESC) AS 'RANK'
                FROM Territories
                WHERE Nation = 'Canada') T
    ON C.Customer_Location = T.TerritoryName
    
        2
  •  0
  •   Martin Smith    14 年前

    我也不确定连接条件。这似乎出乎意料 Customer_Location CustomerID

    我想您需要一个CTE或派生表。

    WITH R AS
    (
    SELECT CustomerID, 
    Rank() OVER (PARTITION BY TID ORDER BY TerritoryName DESC) AS [rank]
    FROM Territories
    WHERE Nation = 'Canada'
    )
    
    
    SELECT Name, Address, City, State, Zip 
      FROM CUSTOMERS
     WHERE Customer_Location IN (SELECT CustomerID FROM R WHERE [rank] <= 100)