2013-07-02 30 views
0

我有一個名爲Postcodes的表,它有超過50萬條記錄。 這個表裏面我有一個名爲PostCodeText列其具有如下:使用VB.NET中的PARTIAL和DISTINCT的MS SQL語句

NG1 1AA 
NG1 1AB 
NG1 1AC 
NG2 1AA 
NG2 5TH 
NG17 3LP 
DE15 4BP 
NG17 5GL 
DE19 4EE... 

我需要的是返回基於部分串DISTINCT匹配的MSSQL聲明。例如:如果我想找到所有不同NG郵政編碼我希望回到:

NG1 
NG2 
NG17 

我已經試過類似:

SELECT DISTINCT postcodetext 
FROM postcodes 
WHERE (postcode_text LIKE 'NG%') 
ORDER BY postcodetext 

我覺得我可能是接近的答案,但其還沒有,任何幫助都會非常困難。 另外我聽說使用LIKE是一個較慢的選項,然後使用=有沒有更快的方法,然後這樣做?

回答

0

嘗試

SELECT LEFT(postcodetext,CHARINDEX(' ',postcodetext,0)) 
FROM postcodes 
WHERE postcodetext like 'NG%' 
GROUP BY LEFT(postcodetext,CHARINDEX(' ',postcodetext,0)) 
ORDER BY postcodetext 

OK,我想我在這裏失去了一些東西,上面的語句做工精細(如果我把ORDER BY),當我在Management Studio中運行它。但是,當我在VB.net代碼運行它,我有一個問題:

運行的發言,並指派值到我的數據表之後,然後我用下面的代碼:

For Each rows In dt.Rows 
    Select Case opt 
     Case 1 ' 
      frmSettings.lstAllPostcodes.Items.Add(rows.Item("postcodetext")) 
      frmSettings.ProgBarSettings.Value = i 
      i = i + 1 
    End Select 
Next 

它失敗當試圖參考rows.item("postcodetext")。我意識到這與使用LEFTSELECT聲明有關。我想我的列表框持有的部分結果(即NG1NG2NG17等等等等)

+0

嗨,感謝您的答覆,但這種說法給我的錯誤消息「列‘postcodes.postcodetext’是在ORDER BY無效子句,因爲它不包含在聚合函數或GROUP BY子句中。「 :不知道這是什麼意思? –

+0

如果我放棄ORDER BY它的作品!謝謝,但是在SQL語句中Order by會很好,不過稍後會通過代碼進行排序,但它現在可以使用,所以非常感謝! –