みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセスのSQL文の検索条件

お世話様です。

アクセスのSQL文で検索条件をどのようにすれば良いのか教えて下さい。

下記のデータから0は除外した上で、
部門CD 1のみの人 Bさん
部門CD 2のみの人 Cさん
部門CD 1と2両方ある人 AとEさん
を抽出したいです。

社員名 部門CD
Aさん  1
Aさん  2
Bさん  0
Bさん  1
Cさん  2
Dさん  0
Eさん  0
Eさん  1
Eさん  2

まず、Where 部門CD <> 0で0を除外しました。
社員名 部門CD
Aさん  1
Aさん  2
Bさん  1
Cさん  2
Eさん  1
Eさん  2

INNER JOINやLEFT JOINを使ったり、集計した結果
SELECT 社員名, Sum(部門CD) AS 部門CDから
社員名 部門CD
Aさん  3
Bさん  1
Cさん  2
Eさん  3
も考えましたが、他に方法があれば教えて頂けますか。

宜しくお願い致します。

投稿日時 - 2015-03-06 09:35:12

QNo.8930115

すぐに回答ほしいです

質問者が選んだベストアンサー

どんな出力結果があなたにとってベストなのかが分からないと・・・。
こんな方法もあるよ・・・という事で。

元テーブルの名前をテーブル1とします。(部門CDは数値型と仮定しています)
部門CDごとに社員名で連番をとります。
SQL文は
SELECT [テーブル1].社員名, [テーブル1].部門CD, DCount("*","テーブル1","社員名<='" & [社員名] & "' and 部門CD=" & [部門CD]) AS 連番
FROM テーブル1;
これをクエリ1とします。

クロス集計クエリをクエリ1を元に
TRANSFORM IIf(IsNull(First([部門CD])),"","◎") AS 式1
SELECT [クエリ1].社員名, Count([クエリ1].連番) AS 兼任部門数
FROM クエリ1
WHERE ((([クエリ1].部門CD)<>0))
GROUP BY [クエリ1].社員名
PIVOT [クエリ1].部門CD;

投稿日時 - 2015-03-06 12:42:02

お礼

解説ありがとう御座いました。
上記のクエリをヒントに抽出条件に一致させることが出来ました。

投稿日時 - 2015-03-06 14:30:52

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

SELECT DISTINCT "1:1のみの人" AS 区分, 社員名 FROM [テーブル1] WHERE (SELECT COUNT(*) FROM [テーブル1] WHERE 部門CD=1 AND 社員名=[社員名])>0 AND (SELECT COUNT(*) FROM [テーブル1] WHERE 部門CD=2 AND 社員名=[社員名])=0
UNION
SELECT DISTINCT "2:2のみの人" AS 区分, 社員名 FROM [テーブル1] WHERE (SELECT COUNT(*) FROM [テーブル1] WHERE 部門CD=1 AND 社員名=[社員名])=0 AND (SELECT COUNT(*) FROM [テーブル1] WHERE 部門CD=2 AND 社員名=[社員名])>0
UNION
SELECT DISTINCT "3:1と2の人" AS 区分, 社員名 FROM [テーブル1] WHERE (SELECT COUNT(*) FROM [テーブル1] WHERE 部門CD=1 AND 社員名=[社員名])>0 AND (SELECT COUNT(*) FROM [テーブル1] WHERE 部門CD=2 AND 社員名=[社員名])>0;

こんな感じです。思い付きで書いたので、もう少し簡略化できるかも知れません。

投稿日時 - 2015-03-06 12:42:46

お礼

何度も解説ありがとう御座いました。
クエリが複雑でややこしくなりそうでしたので、今回はこちらのクエリを採用しませんでした。
申し訳御座いません。

投稿日時 - 2015-03-06 14:29:34

ANo.2

Hosoku:抽出する順番は区分で指示できます。

投稿日時 - 2015-03-06 11:11:13

ANo.1

あんまり難しく考えないで・・・。

>部門CD 1のみの人 Bさん
>部門CD 2のみの人 Cさん
>部門CD 1と2両方ある人 AとEさんを抽出したいです。

それぞれをそのまんまSELECT文にしてUNIONで結合すると・・・。

投稿日時 - 2015-03-06 10:58:15

補足

ありがとう御座います。
さらに分からなくなりました。

もう少し詳しく教えて頂けないでしょうか。

よろしくお願いいたします。

投稿日時 - 2015-03-06 12:00:41

あなたにオススメの質問