SQL DISTINCT文で重複行を1行で表示する
下記のように「売上明細」のデータがあります。
売上NO | 社員コード | 売上日 | 売上金額 | 会社コード |
---|---|---|---|---|
1 | 1 | 20150401 | 200 | 1 |
2 | 1 | 20150401 | 300 | 1 |
3 | 2 | 20150408 | 100 | 1 |
4 | 2 | 20150401 | 150 | 2 |
5 | 3 | 20150505 | 550 | 2 |
売上があった日にちを一覧で表示したい。
SQL
は下記のようになります。
SELECT DISTINCT T1.売上日
FROM 売上明細 AS T1
ORDER BY T1.売上日
売上日 |
---|
20150401 |
20150408 |
20150505 |
SELECT
句でSELECT
のあとにDISTINCT
を指定すると、重複した列は1行のみ出力するようになります。
売上NOが1と2と4のデータの売上日はともに20150401
なのでDISTINCT
を指定しなければ20150401
のデータが3行表示されてしまいますが、DISTINCT
を指定することにより1行のみ表示されるようになります。
DISTINCTで複数列を指定する
DISTINCT
は取得した列のすべての項目が同一かどうかで、行の重複を判断しています。
例えば下記のようなSQL
を実行した場合、売上日は重複していても、社員コードや会社コードが異なるので、売上NOが1と2と4のデータが表示されます。
売上日、社員コード、会社コードがすべて同じ値の場合のみ重複していると判断され、1行のみ表示されます。
SELECT DISTINCT T1.売上日
,T1.社員コード
,T1.会社コード
FROM 売上明細 AS T1
ORDER BY T1.売上日
社員ごとに、売上があった日にちを一覧で表示したい。
SQL
は下記のようになります。
SELECT DISTINCT
T1.社員コード
,T2.社員名
,T1.売上日
FROM 売上明細 AS T1
JOIN 社員マスタ T2
ON T1.社員コード = T2.社員コード
ORDER BY T1.社員コード, T1.売上日
社員コード | 社員名 | 売上日 |
---|---|---|
1 | 社員名1 | 20150401 |
2 | 社員名2 | 20150401 |
2 | 社員名2 | 20150408 |
3 | 社員名3 | 20150505 |
社員コード、社員名、売上日がすべて同一のデータは1行のみ表示されます。