2016-03-07 96 views
0

這裏我有兩列像下面的例子column1 & column2在sql表中,我想獲得基於column2的唯一值行來自表的列值
下面的實施例的虛擬表如何從基於charachter長度值的sql表中獲取唯一值

Column1    Column2 

----------   ------------- 

1001     ab 
1001     abc 
1001     abcd 
2001     wxyz 
2001     wxy 
2001     wx 

的在上面的例子中值從開始 &從列2 0123開始瓦特另一個值
在相同值的字符長度的基礎上,我想導致像下面
輸出

Column1    Column2 

----------   ----------- 

1001      abcd 
2001      wxyz 

在此先感謝幫助:)

+6

描述如何爲獨特的column1值選擇column2值。 – jarlh

+0

以上輸出基於單列表列上的第2列值(字符長度) –

+0

如果兩行具有不同的值,但長度相同(最大)會怎麼樣? – jarlh

回答

1

如果你正在尋找,如果你在COLUMN2值某處包含在其他行,換句話說:如果您正在使用它們自己獨特的字符組合尋找行,這可能是您的解決方案:

CREATE TABLE TestTable(Column1 INT,Column2 VARCHAR(100)); 
INSERT INTO TestTable VALUES 
(1001,'ab') 
,(1001,'abc') 
,(1001,'abcd') 
,(2001,'wxyz') 
,(2001,'xyz') 
,(2001,'yz'); 

SELECT * 
FROM TestTable 
WHERE NOT EXISTS(SELECT 1 
       FROM TestTable AS x 
       WHERE x.Column1=TestTable.Column1 
        AND LEN(x.Column2)>LEN(TestTable.Column2) 
        AND x.Column2 LIKE '%' + TestTable.Column2 + '%' 
       ) 

DROP TABLE TestTable; 
+0

- AND x.Column2 LIKE'%'+ TestTable.Column2 +'%'註釋此行感謝以上查詢。 –

+1

@Pankaj,很高興這可以幫助你...請 - 下一次你問一些問題 - 請記住,其他用戶不知道什麼是你清楚的**。請提供樣本數據,預期輸出,清晰描述,正確標記(DBMS!)以及您自己嘗試過的內容以及您得到的錯誤/錯誤結果。快樂的編碼! – Shnugo

2

如果我理解正確的,你想最長的長度(當沒有兩個長度相同的時候,你沒有說要做什麼),但基本上你需要這樣的東西:

SELECT * FROM YourTable 
WHERE (column1,len(column2)) IN(select Column1,max(len(column2)) 
           FROM YourTable 
           GROUP BY Column1) 
+0

但是,這只是尋找最大的長度不看文本的內容。現在,你是誰快速可能和賈爾在他的評論問正確的問題:-) – Shnugo

+0

是的,但我檢查了數據的內容,abcd大於ab,而wxyz小於xyz,yz,所以唯一我可以理解的一點是,選擇最長的那個:) @Shnugo – sagi

+0

Msg 102,Level 15,State 1,Line 2 ','附近的語法不正確。 Msg 156,Level 15,State 1,Line 3 關鍵字'FROM'附近的語法不正確。 –