2012-05-05 36 views
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。

回答

-2

試試這個:

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

失敗。 'LineNbr','ItemName'和'Qty'不能被返回,因爲它們不是聚合子句的一部分。 – Oded

+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 
+0

我想要列OrdNbrFirstLineNbr和AllLineNumbers也。 –

+0

@Romil:「first lineNbr」是選中的一個(因爲where子句。我不知道是否有一種簡單的方法來執行SQL Server中行號的聚合。 –

+0

我們已經合併函數在sql server中進行聚合 –