1

我可以使用临时表或循环访问此表来获取结果,但我想在一个查询中将下表转换为所需的结果,并具有出色的性能。

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。

4

2 回答 2

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
于 2012-05-05T08:29:44.160 回答
-2

尝试这个:

SELECT OrdNbr, LineNbr, ItemName, Qty 
FROM Order
GROUP BY OrdNbr
ORDER BY LineNbr;
于 2012-05-05T08:19:06.917 回答