2012-12-14 116 views
0

該表包含許多行,並且所有列都包含相同的數據。對於實例:SQL Select If Then

FullName  Gender  DOB 
--------------------------------- 
Mary Jones  Female  2012-05-01 

我想爲每個人選擇一行以顯示在報告中。我認爲最簡單的方法可能是給我們一個if語句來檢查下一行是否與第一個唯一行相同。

回答

2

正如其他人所說,因爲所有的行都是一樣的,你可以使用不同的關鍵字:

SELECT DISTINCT <columns> 
FROM table 

但是,你很可能會發現,這些重複記錄的原因是,至少有一個表中某處的列是不同的。在這種情況下,您可能需要使用GROUP BY來代替:

SELECT <columns> 
FROM table 
GROUP BY <columns> 

如果你需要顯示的數據不是分組列的一部分,您只列出匹配在GROUP BY子句中的列,然後你必須使用聚合函數或子查詢將唯一列中的數據引入選擇列表。 GROUP BY查詢可能會變得非常複雜並且讓您的頭部受傷。

如果這些列確實是一致的,那麼您的模式或應用程序設計中的某些內容是不正確的。你很少會在桌面上真正重複記錄,而這很可能意味着某些事情是錯誤的。

最後,我需要評論你的IF/THEN請求。 這個想法是離開的。 SQL有一個基於SET的聲明式編程風格。考慮使用程序的問題像IF/THEN這樣的工具只會導致問題。即使你確實需要一個條件表達式,在SQL語句中執行它的方式也是通過CASE表達式。

+0

謝謝。非常徹底的答案! – Susan

1

如果數據中的所有列一樣,那麼你可以使用關鍵字DISTINCT

SELECT DISTINCT FullName, Gender, DOB 
FROM yourtable 

這將檢查所有字段中的數據是唯一消除任何重複。

SQL Fiddle with Demo

另一種方式來寫這個是用在所有領域GROUP BY

SELECT FullName, Gender, DOB 
FROM yourtable 
GROUP BY FullName, Gender, DOB 
0

你應該使用不同的條款,而不是..如果所有列實際上完全一樣。

select distinct FullName, Gender, DOB 
    from <your_table_name>; 

有重複行通常是一些錯誤的標誌(也可以是數據被加載多次)。您可能需要調查以查看實際原因。