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