2011-12-21 43 views
0

我有一個包含記錄的表如下:SQL來過濾基於列的多條記錄

Column_1 Column_2 Column_3 

CA  123  EN 

CA  123  SP 

CA  789  EN 

我的輸出應該如下:

Column_1 Column_2 Column_3 

CA   123  SP 

CA   789  EN 

我知道這條SQL並不複雜寫,但我已經嘗試了幾個小時了,仍然沒有得到滿意的結果。有什麼建議麼?

+1

什麼的疑問,你試過嗎? – 2011-12-21 08:06:32

+0

......你爲什麼要這兩行,而不是其他兩行?另外,你使用的是什麼服務器軟件? – 2011-12-21 08:07:36

+0

感謝球員...沒關係這個..我使用的資格,並得到了結果.. – visakh 2011-12-21 08:56:40

回答

-1

我以爲你在找group by

select Column_1, Column_2, Column_3 from table_name group by Column_2, Column_3 

上面的查詢工作在MySQL,但不是在評論中指出許多其它SQL實現,我不認爲它你真正想要的東西。返回3行,而不是2

再次,只是猜測,但據我所知,這也許是你在找什麼:

select Column_1, Column_2, 
    (select Column_3 from test_table t2 
    where t2.Column_1=t1.Column_1 and t2.Column_2=t1.Column_2 
    order by Column_0 desc limit 1) as Column_3 
from test_table t1 
group by Column_1, Column_2 

這工作在MySQL,在任何其他未測試。按照要求返回2行。

您可以在那裏看到一個額外的Column_0 - 應該是表中的主要[整數]鍵。我推測你已經擁有它了。如果沒有,則需要將其添加,否則,當您有重複的Column_2時,您不知道哪個是最後一行插入到表中以便返回它。

此外,limit 1特定於MySQL。 MSSQL中的等效項爲select top 1 ...,Firebird select first 1 ...等。您沒有指定您正在使用的rdbms。

+0

您的查詢甚至不會運行,在一些SQL實現(非聚合列一個聚合查詢) – 2011-12-21 08:10:17

+0

對於接受查詢的數據庫,這將爲您提供三行結果。例如MS SQL Server沒有。 – Guffa 2011-12-21 08:11:14

+0

是的,你是對的,它不會做他所需要的,因爲還會顯示3條記錄。現在仔細閱讀,我不明白他究竟想要達到什麼目的。 – talereader 2011-12-21 08:12:01

1

,讓你這一結果的查詢是:

select Column_1, Column_2, Column_3 
from TheTable 
where 
    (Column_2 = 123 and Column_3 = 'SP') 
    or 
    (Column_2 = 789 and Column_3 = 'EN')