2012-07-14 52 views
0

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

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 

回答

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) 

我一定要考,但我THIK都将工作。


问题是rowid不在任何组中。您可以订购Products.id。如果rowid将与每个订单相同,您可以通过max(rowid)min(rowid)订购或将rowid添加到群组声明中。

+0

对不起,我忘了添加导致所有问题的@NumOfProducts。 – Eyal 2012-07-14 18:04:43

+0

这是无效的SQL,您无法将其分配给变量并为其设置别名。但是我认为你可以在'ORDER BY'之后放置'ROW_NUMBER()OVER(ORDER BY Products.Id)'' – Hogan 2012-07-14 18:07:09

+0

非常感谢! – Eyal 2012-07-14 18:16:57

1

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

SELECT Scope_Identity() 

编辑 *我试图让ROW_NUMBER的最大行ID()*

环绕你的查询中

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

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

+0

对不起,我忘了添加导致所有问题的@NumOfProducts。 – Eyal 2012-07-14 18:04:03

+0

不,我想获取ROW_NUMBER()的最大行ID。问题是当我尝试将值传入@NumOfProducts时,我无法排序。 – Eyal 2012-07-14 18:07:08