2017-07-03 80 views
3

我有一组记录排序(Order BY)ProductDesc,RecDate,然后ProductBrand ,它给了我下面的结果。Sql Select Order Issue

- >> SQL是

SELECT RecDate, ProductDesc,ProductBrand 
FROM MyTable i 
Order BY i.ProductDesc, i.RecDate,i. ProductBrand 

-

RecDate  ---  ProductDesc    ---  Brand 
-------------------------------------------------------------- 
2017-07-15  ---  TOMATO ROMA    ---  (S & S) 
2017-07-16  ---  TOMATO ROMA    ---  (A & B) 
2017-07-17  ---  TOMATO ROMA    ---  (C & D) 
2017-07-18  ---  TOMATO ROMA    ---  (AAA) 
2017-07-25  ---  TOMATO ROMA    ---  (C & D) 
2017-07-26  ---  TOMATO ROMA    ---  (C & D) 

,但我的要求是,以显示这些记录由ProductDesc,RecDate在ASC排序,然后如果有相同的产品用(如'TOMATE ROMA(C & D)'),但接收日期不同, 需要将它们组合在一起。排序后的数据应该如下所示

RecDate  ---  ProductDesc    ---  Brand 
---------------------------------------------------------------- 
2017-07-15  ---  TOMATE ROMA    ---  (S & S) 
2017-07-16  ---  TOMATE ROMA    ---  (A & B) 
2017-07-17  ---  TOMATE ROMA    ---  (C & D) 
2017-07-25  ---  TOMATE ROMA    ---  (C & D) 
2017-07-26  ---  TOMATE ROMA    ---  (C & D) 
2017-07-18  ---  TOMATE ROMA    ---  (AAA) 

任何建议我如何能够实现这一点? 注意:我正在使用SQL SERVER,并运行sql填充dataTable,并用此数据表填充datagridview。

回答

5

您想按照品牌的最低日期排序。您可以使用窗口函数的order by条款做到这一点:

select RecDate, ProductDesc, ProductBrand 
from MyTable i 
order by i.ProductDesc, 
     min(i.RecDate) over (partition by i.ProductBrand), 
     i.ProductBrand, 
     i.RecDate; 
+0

这个解决方案工作正常..谢谢 能否请你建议我怎么能得到与LINQ做一样的吗? – Ronjon

+0

是否有可能对linq或数据表做同样的事情? – Ronjon