2016-12-28 26 views
0

我有一個名爲「Majors」的列,我想從該列中獲取所有內容,但是會過濾掉任何具有重複第一個字符的內容。 如果我有AMST和ADIB,只有其中一個出現,它可以是不確定的。所以如果我有AMST,ADIB,BIOL,CSCI,CENG,EENG,那麼最終的結果可能是AMST,BIOL,CENG,EENG。獲取不同的第一個字符,返回整列

我目前擁有的是:

DECLARE @VTest table(majName varchar(100)) 

INSERT INTO @VTest (majName) 
SELECT DISTINCT TOP 5 Major FROM MajorTbl ORDER BY Major desc 

--For some reason returns all the rows despite it only giving distincts (Would return AMST and ADIB, even though it should only give one of those and not both) 
SELECT * FROM @VTest 
WHERE SUBSTRING(majName, 1, 1) = 
    (SELECT DISTINCT SUBSTRING(CONVERT(varchar(100), [@VTest].majName), 1, 1) as c) 

我如何能得到我想要的輸出任何想法?

+0

請用您正在使用的數據庫(它似乎是SQL Server)標記您的問題。 –

+1

如果你有AMST,ADIB我們怎麼知道哪一個應該先出現?降序?這就是「結果可能是AMST ..」意味着......但後來「,CSCI CENG ..」具有CENG的預期結果,這將是上升的。 – plditallo

+0

刪除其他行的原因尚不清楚,因爲它們的結果不同。此外,使用具有不相關子查詢的子字符串不會很好地擴展。 –

回答

2

如果你想每個「東西」只有一排,然後row_number()似乎是解決這個問題的明顯的候選人:

select t.* 
from (select t.*, 
      row_number() over (partition by left(majName, 1) order by newid()) as seqnum 
     from @VTest t 
    ) t 
where seqnum = 1; 

注意,這裏使用的SQL Server約定的東西像隨機行。你的代碼看起來像SQL Server代碼。

+0

我已經這麼長時間了,而且我實際上已經嘗試過這樣做,但沒有放入左側。 – hanahouhanah

相關問題