我们有一个功能允许我们创建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不起作用,因为如果任何字段匹配,所有存在的都返回“TRUE”(即使我们放置返回主查询的链接)。有谁知道我怎么能让这个工作?感谢。
答案 0 :(得分:2)
您想加入嵌套查询。我已经对适当的连接条件做了一个假设,但它会是这样的:
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
答案 1 :(得分:0)
我也不确定连接条件。在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)