2011-05-21 22 views
0

我已經被授權在不重寫項目的情況下更改其他人的代碼。我有一個sql語句來抓取客戶表中的所有數據。返回得到:獲取所有數據,僅顯示來自返回的相關數據

Inum - which can have many of the same entries. 
Istep - Which is unique but bound to above. 
Istage - which is unique and bound to above. 

它looke這樣的:

10010 - 100 - 999 
10010 - 101 - 888 
10010 - 102 - 777 
10018 - 100 - 999 
10018 - 130 - 555 
10026 - 300 - 333 

我只想讓每組的第一INUM讓我得到:

10010 - 100 - 999 
10018 - 100 - 999 
10026 - 300 - 333 

然後,我會帶關閉最後一部分 - Istep並允許在索引更改發生在全部(VB.NET)時將其分配給腳本 我需要不斷獲取所有數據,因爲它在頁面中打包爲var,並且是r根據當前內容反覆使用。我可能需要在VB中完成,不確定。

加法(根據第一個答案): @eaolson - 感謝您的回覆。撇開總字數......我應該更清楚。 Istep對於我們處於流程中的位置是獨一無二的,因爲我們每個項目(Inum)每次只能有一個地方。但他們都在分貝和拉他們都回來的方式。 Istage也是如此。它對於我們所在的步驟來說是獨一無二的,但是到目前爲止的所有階段和步驟都會被拉下。沒有可以找到的任何rowguides或唯一ID。他們以這種方式完成了大多數表格,並且很難進行一些更改。我想要的是一個單一的Inum。所以這個電話得到了第一個Inum 10010,然後忽略了其餘的10018,然後跳過10018的其餘部分,直到10026改變,跳過其餘的10023,等到下一個10023等。我仍然需要ALL *數據它變成一個var從頁面中拉出。我很難過。我正在考慮把它放到一個數據網格(.NET)中,並用於其餘的調用。但是,如果可能的話,我寧願用SQL來完成它,因爲我知道我會因爲這種方式而反覆做這個事情。謝謝。

+0

你想在代碼或查詢中做到這一點? – Magnus 2011-05-21 21:40:03

+0

@eaolson的答案不會做你想做的和你使用什麼DBMS? – 2011-05-22 20:54:40

回答

1

當你說「第一價值」,你的意思是「最低價值」?行順序不一定能在表中保證。

SELECT t1.inum, t1.istep, t1.istage 
    FROM mytable t1 
INNER JOIN (
    SELECT inum, MIN(istep) as min_istep 
     FROM mytable 
    GROUP BY inum) t2 ON t2.inum = t1.inum AND t2.min_istep = t1.istep 

你也可以說istep和istage是「獨特的」,但它們在你的例子中有重複的值。我認爲(inum,istep)是你的主要關鍵。

+0

謝謝,修補程序的修改版本稍作修改。 – Rad 2011-05-24 22:23:01