2016-10-24 49 views
0

我正在與SQL查詢打架,但無法解決它。一個有一個表是這樣的:從distint查詢中選擇非重複

SELECT DISTINCT Field1, Field2 
FROM myTable 
WHERE Field3 = 'value'; 
ID Field1 Field2 
1 Yes  Info 
1 No  Info 
2 Yes  Info 
3 No  Info 
3 Yes  Info 
4 No  Info 

我想有一個結果查詢,我沒有任何重複的值。如果有重複的值,我希望得到「是」,而在其他情況下,我希望在該字段中具有現有值(是或否)。

ID Field1 Field2 
1 Yes  Info 
2 Yes  Info 
3 Yes  Info 
4 No  Info 

在此先感謝!

+1

您正在使用哪些DBMS? –

+0

我正在使用SQL Server。所有的答案都奏效了,我用了最大的答案,因爲它花了最短的時間完成。謝謝大家! –

回答

0

如果你想優先選擇YesNo對於給定的對的記錄對應的ID,那麼您可以選擇最大Field1(和最大Field2):

SELECT ID, MAX(Field1) AS Field1, MAX(Field2) AS Field2 
FROM myTable 
WHERE Field3 = 'value' 
GROUP BY ID 
+0

好的一個,據我所見,當你在行上執行分組時,mysql會自動取第一行(或第一行的值) –

+0

@DanyalSandeelo是的,它做到了這一點......但僅限於某些版本。在最新版本的MySQL中,您的查詢可能無法運行,因此您可能需要更改它。 –

0

通過id集團,它會自動做的工作

SELECT DISTINCT Field1, Field2 FROM myTable WHERE Field3 = 'value' group by id 
+1

這不會工作(我認爲),因爲您選擇的列不出現在「GROUP BY」(也不是聚合)中。 –

+0

它在mysql中工作,是的它不在postgres中@TimBiegeleisen –

0

您可以使用GROUP BY查詢:

SELECT CASE WHEN COUNT(*) > 1 THEN 'Yes' ELSE Field1 END AS Field1, Field2 FROM myTable GROUP BY 2 
0
select DISTINCT 
ID, 
case 
when (group_concat(Field1))="YesNo" then "Yes" 
when (group_concat(Field1))="NoYes" then "Yes" 
else (group_concat(Field1)) 
end as Field1, 
Field2 from 
(SELECT DISTINCT ID,Field1, Field2 
FROM myTable 
WHERE Field3 = 'value')A 
group by ID