建议查询以在一个具有性能的查询中获取所需结果

时间:2012-05-05 07:58:55

标签: sql-server-2008

我可以使用临时表或循环遍历此表来获取结果,但我希望将以下表格转换为一个具有良好性能的查询中的所需结果。

Order Table

OrdNbr  LineNbr ItemName    Qty
1       1       Pen         1
1       2       Pencil      2
1       3       Scale       2
2       5       Bottle      2
3       3       Pen         10
3       1       Pencil      5

Required Result:

OrdNbr  OrdNbrFirstLineNbr  ItemName    Qty     AllLineNumbers
1       1-1                 Pen         1       1,2,3
2       2-5                 Bottle      2       5
3       3-1                 Pencil      5       1,3

OrdNbr和LineNbr是订单表的主键。我想只获取同一个OrdNbr的第一条记录。

获得结果的逻辑: 查找不同的订单号并获取单个订单号的最低行号。现在显示该订单中最低行号的订单号,最低行号和详细信息。我想要两个额外的派生字段OrdNbrFirstLineNbr和AllLineNumbers。

2 个答案:

答案 0 :(得分:1)

select OrdNbr, 
       LineNbr as OrdNbrFirstLineNbr, 
       ItemName, 
       Qty
from (
   select *,
          row_number() over (partition by OrdNbr order by LineNbr) as rn
   from "Order"  -- need to quote this, because order is a reserved word
) t
where rn = 1

答案 1 :(得分:-2)

试试这个:

SELECT OrdNbr, LineNbr, ItemName, Qty 
FROM Order
GROUP BY OrdNbr
ORDER BY LineNbr;