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

2つの操作を混在させることはできません。試してみると、エラーメッセージは一目瞭然です。

変数に値を割り当てるSELECTステートメントは、データ取得操作と組み合わせてはなりません。

于 2012-07-12T21:00:58.173 に答える
0

MySQLでは、次のようなことができます。 SELECT col1, col2, col3 FROM table1 WHERE col3 = paramただし、2つの操作を同時に混合することはできません。このルールはSQLServerに適用されると思います。しかし、今、あなたが何をしようとしているのかは明らかです。具体的に教えてください。

于 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句を追加したことに注意してください。クエリは、@paramを使用するために1行を返す必要があります。

2番目のオプションを使用した場合は、次の操作を実行できます

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

結果を返す

于 2012-07-12T21:08:28.777 に答える