2

我有一个查询给出:

orp      CategoryId     Category        City      

999         1           bouquets        city-a       
999         2           arrengmnt       city-b       
999         4           chocolate       city-c       

我想在每一行中添加具有该类别的商店数量:

orp     CategoryId      Category        City      NoShops

999         1           bouquets        city-a       10
999         2           arrengmnt       city-b       14
999         4           chocolate       city-c       3

我需要获取 CategoryId (@CategoryId),所以我在考虑这样的事情(显然不起作用):

SELECT  Categories.OrderInPage as orp, CategoriesInLanguages.CategoryName,  @CategoryId = Categories.Id     
                ,(
                    SELECT COUNT(Shops.Id) as NoShops
                        FROM  Cities INNER JOIN
                                      CitiesInLanguages ON Cities.Id = CitiesInLanguages.CityId INNER JOIN
                                      ShopsInCities ON Cities.Id = ShopsInCities.CityId INNER JOIN
                                      CategoriesInLanguages INNER JOIN
                                      Categories ON CategoriesInLanguages.CategoryId = Categories.Id INNER JOIN
                                      ProductstInCategories ON Categories.Id = ProductstInCategories.CategoryId 
                        WHERE      (Products.IsEnable = 1)  AND ( Categories.Id = @CategoryId)) AS Z  
                )
        FROM  Cities INNER JOIN
                          CitiesInLanguages ON Cities.Id = CitiesInLanguages.CityId INNER JOIN
                          ShopsInCities ON Cities.Id = ShopsInCities.CityId INNER JOIN
                          CategoriesInLanguages INNER JOIN
                          Categories ON CategoriesInLanguages.CategoryId = Categories.Id INNER JOIN
                          ProductstInCategories ON Categories.Id = ProductstInCategories.CategoryId 
        WHERE      (Products.IsEnable = 1) 
4

3 回答 3

1

您不能混合使用这两种操作。如果您尝试它,错误消息是不言自明的。

为变量赋值的 SELECT 语句不得与数据检索操作结合使用。

于 2012-07-12T21:00:58.173 回答
0

在 MySQL 中,您可以执行以下操作: SELECT col1, col2, col3 FROM table1 WHERE col3 = param,但不能同时混合两个操作。我假设这条规则适用于 Sql Server。但是,现在很清楚您要做什么。你能更具体一点吗?

于 2012-07-12T21:02:05.107 回答
0

你只能拥有

Select col1, col2, col3 from table1 

或者

Select  @param1 = col1, @param2 =  col2, @param3 = col3 from table1 where id=value

而不是两者兼而有之。注意我添加了 WHERE 子句,您的查询应该返回 1 行以使用 @param

如果您使用第二个选项,则可以执行以下操作

Select  @param1 as col1, @param2 as  col2, @param3 as col3 

返回结果

于 2012-07-12T21:08:28.777 回答