2016-04-13 124 views
-1

我的表輸入:動態查詢的SQL Server

cd SEQ status 
DGH 1 Outstanding Requirement 
OTH 1 Outstanding Requirement 
OTH 2 O 
OTH 3 O 
OTH 1 Outstanding Requirement 
OTH 2 O 
OTH 3 O 
OTH 4 O 
OTH 5 O 

我需要輸出如下

cd SEQ MyOrder 
DGH 1 DGH-1 
OTH 1 OTH-1 
OTH 2 OTH-1 
OTH 3 OTH-1 
OTH 1 OTH-2 
OTH 2 OTH-2 
OTH 3 OTH-2 
OTH 4 OTH-2 
OTH 5 OTH-2 
+2

您需要另一列來建立一個'order by' - 沒有它,你不能保證結果的順序。 – sgeddes

回答

2

如前所述sgeddes,你需要另一列以建立您想要的順序。我假設你有一個這樣的ID列:

id cd SEQ 
1 DGH 1 
2 OTH 1 
3 OTH 2 
4 OTH 3 
5 OTH 1 
6 OTH 2 
7 OTH 3 
8 OTH 4 
9 OTH 5 

鑑於此,您可以使用窗口函數來實現你想要的。請注意,我假設您的表格在下面被稱爲「項目」。

SELECT cd, 
    SEQ, 
    DENSE_RANK() OVER (PARTITION BY items_grpd.cd ORDER BY items_grpd.grp) AS MyOrder 
FROM 
(
    SELECT id, 
     cd, 
     SEQ, 
     ROW_NUMBER() OVER(PARTITION BY cd ORDER BY id) - SEQ AS grp 
    FROM items 
) AS items_grpd 
ORDER BY items_grpd.id; 
+0

謝謝..它的工作 – Uday