SQL Server,将值插入变量并排序

时间:2012-07-14 17:57:37

标签: sql sql-server-2008-r2

我需要在将值插入变量后对查询结果进行排序。 我试图按照'RowId'排序,但在我的情况下它无效。
以下是我的查询,我该如何使其工作? 感谢。

SELECT TOP 1 @NumOfProducts = ROW_NUMBER() OVER(ORDER BY Products.Id) AS RowId 
        FROM          Cities INNER JOIN
                      CitiesInLanguages ON Cities.Id = CitiesInLanguages.CityId INNER JOIN
                      ShopsInCities ON Cities.Id = ShopsInCities.CityId INNER JOIN
                      Categories INNER JOIN
                      ProductstInCategories ON Categories.Id = ProductstInCategories.CategoryId INNER JOIN
                      Products ON ProductstInCategories.ProductId = Products.Id INNER JOIN
                      ProductsInProdutGroup ON Products.Id = ProductsInProdutGroup.ProductId INNER JOIN
                      ProductsGroups ON ProductsInProdutGroup.ProductGroupId = ProductsGroups.Id INNER JOIN
                      ShopsInProductsGroup ON ProductsGroups.Id = ShopsInProductsGroup.ProductGroupId INNER JOIN
                      aspnet_Users ON ShopsInProductsGroup.ShopId = aspnet_Users.UserId ON ShopsInCities.ShopId = aspnet_Users.UserId INNER JOIN
                      ProductsNamesInLanguages ON Products.Id = ProductsNamesInLanguages.ProductId INNER JOIN
                      UsersInfo ON aspnet_Users.UserId = UsersInfo.UserId INNER JOIN
                      ProductOptions ON Products.Id = ProductOptions.ProductId INNER JOIN
                      ProductOptionsInLanguages ON ProductOptions.Id = ProductOptionsInLanguages.ProductOptionId INNER JOIN
                      ProductFiles ON Products.Id = ProductFiles.ProductId INNER JOIN
                      ProductsInOccasions ON Products.Id = ProductsInOccasions.ProductId INNER JOIN
                      Occasions ON ProductsInOccasions.OccasionId = Occasions.Id INNER JOIN
                      OccasionsInLanguages ON Occasions.Id = OccasionsInLanguages.OccasionId
WHERE     (Products.IsAddition = 0) AND (Categories.IsEnable = 1) AND (Products.IsEnable = 1) AND (ProductsGroups.IsEnable = 1) AND (Cities.IsEnable = 1) AND 
                      (ShopsInProductsGroup.IsEnable = 1) AND (CitiesInLanguages.CityName = @CityName) AND (ProductsNamesInLanguages.LanguageId = @languageId) AND 
                      (Categories.Id = @CategoryId) AND (ProductOptions.IsEnable = 1) AND (ProductFiles.IsEnable = 1)
                      group by Products.Id, ProductsNamesInLanguages.ProductName, UsersInfo.Name
                      Order By RowId

2 个答案:

答案 0 :(得分:1)

使用编辑试试这个:

SELECT TOP 1 @NumOfProducts = ROW_NUMBER() OVER(ORDER BY Products.Id),
                              ROW_NUMBER() OVER(ORDER BY Products.Id) AS RowId 

或尝试

ORDER BY ROW_NUMBER() OVER(ORDER BY Products.Id)

我必须测试,但我会两个都会工作。


问题是rowid不属于任何分组项目。

您可以按Products.id订购。如果每个rowid的{​​{1}}相同,您可以按max(rowid)min(rowid)订购,或将rowid添加到group by语句中。

答案 1 :(得分:1)

您是否尝试查找最近插入的行的ID?你想要

 SELECT Scope_Identity()

修改 *我正在尝试获取ROW_NUMBER()*

的最大行ID

将您的查询换行

 SELECT  @NumOfProducts = Max(RowID) FROM
 ( [your query here] ) v

或者,SELECT COUNT ...查询可以提供答案