2011-11-22 52 views
1

我想查询一个表格并将结果导入变量。使用变量结果做另一个选择使用变量细节作为过滤器的查询。创建一个sql变量并查询其他表格

到目前为止:

DECLARE @storeIds int  
SET @storeIds = (SELECT StoreID FROM Store WHERE ParentStoreID=9) 

--print @storeIds 

SELECT c.FirstName, c.LastName, c.CustomerId, r.StoreID 
FROM Consumer AS c 
    INNER JOIN Purchases AS r ON c.CustomerId= r.CustomerId 
WHERE r.StoreID = @storeIds 
    -- (r.StoreID = 9) OR 
    -- (r.StoreID = 10) OR 
    -- (r.StoreID = 11) 
GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID 
ORDER BY c.FirstName 

我得到一个错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

回答

2

除非你特别想在其他地方的@StoreIds变量,你可以只修改你的WHERE子句:

WHERE r.StoreID IN (SELECT StoreID FROM Store WHERE ParentStoreID = 9) 
+0

比ks巴里!我不知道我可以在WHERE内创建另一个选择语句:( –

1

你的问题是,多个商店具有相同的ParentStoreID,所以当您查询,您正试图把多值写入INT变量。

你可以看一下尝试:

SELECT c.FirstName, c.LastName, c.CustomerId, p.StoreID 
FROM Consumer AS c 
INNER JOIN Purchases AS p ON c.CustomerId = p.CustomerId 
INNER JOIN Store AS s ON p.StoreId = s.StoreId 
WHERE s.ParentStoreID = 9 
GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID 
ORDER BY c.FirstName 

该查询应该给你你想要的所有采购,从所有的商店与ParentStoreId = 9

关于JOINS的信息可能对您有帮助。

0

巴里和亚当·温格拥有最好的办法,但要直接解决了错误,你能保证你在使用顶部1修改器设置变量的同时得到正好一个结果。像:

DECLARE @storeIds int  
SET @storeIds = (SELECT top 1 StoreID FROM Store WHERE ParentStoreID=9) 
0

可以用不同的方式来完成:

  1. 使用子查询

    SELECT c.FirstName, c.LastName, c.CustomerId, r.StoreID 
    FROM Consumer AS c 
        INNER JOIN Purchases AS r ON c.CustomerId= r.CustomerId 
    WHERE r.StoreID = (SELECT StoreID FROM Store WHERE ParentStoreID=9) 
    GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID 
    ORDER BY c.FirstName 
    
  2. 使用连接操作

    SELECT c.FirstName, c.LastName, c.CustomerId, r.StoreID 
    FROM Consumer AS c 
        INNER JOIN Purchases AS r ON c.CustomerId= r.CustomerId 
        INNER JOIN (SELECT StoreID FROM Store WHERE ParentStoreID=9) AS s(StoreID) 
         ON r.StoreID = s.StoreID 
    GROUP BY c.FirstName, c.LastName, c.CustomerId, r.StoreID 
    ORDER BY c.FirstName