SQLで特定の検査種別のスタッフを抽出する方法
- VB.Netを使用して、当事業所の健康診断管理を行いたいと考えています。特定の検査種別『C』のみのスタッフを抽出するためのSQL文を教えてください。
- DBには社員ID、名前、検査種別のフィールドがあり、検査種別『C』のみのスタッフを抽出したいです。
- 独学で勉強しているため、処理方法がわかりません。遠回りな処理でも構いませんが、なるべく効率的な方法を教えていただければと思います。
- ベストアンサー
SQLの書き方
当事業所の健康診断管理をVB.Netで行おうとしています 下記ののようなDB内容で『c』のみ検査するスタッフを抽出するSQLはどのようになりますか? フィールド:社員ID、名前、検査種別 0001、中川、A 0001、中川、B 0001、中川、C 0002、木村、A 0002、木村、C 0003、大野、C 0004、田中、A 0004、田中、C 0005、山田、A 0005、山田、B 抽出後は『0003、大野、C』としたいのですが… なかなかいいアイデアがでてきません 独学で勉強しているのですが、うまく処理させることができません (かなりの遠回りでなら処理可能なんですが:汗) ご教授お願いします。
- Alshark
- お礼率62% (64/103)
- Visual Basic
- 回答数4
- ありがとう数5
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Alsharkさん こんにちは。 下記のSQLでできるかと思います。 ※確認はAccessで行いました。 SELECT * FROM T検査 WHERE 社員ID NOT IN (SELECT Distinct 社員ID FROM T検査 WHERE 検査種別<>"C"); お試しください。
その他の回答 (3)
- yamada_g
- ベストアンサー率68% (258/374)
他にもnot existsを使って select 社員ID,名前,検査種別 from テーブル as a where 検査種別 = 'C' and not exists ( select * from テーブル as b where a.社員ID = b.社員ID and b.検査種別 <> 'C'); としてもよさそうです。
お礼
ありがとうございます。 色々な方法があり、勉強になります。
- Tom-3
- ベストアンサー率32% (42/130)
テーブル名は「検査種別」としました。 私ならば下記のように記述します。 SELECT A.社員ID ,A.名前 ,A.検査種別 ,B.社員ID FROM dbo.検査種別 AS A LEFT JOIN ( SELECT BA1.社員ID FROM dbo.検査種別 AS BA1 WHERE 検査種別<>'C' ) AS B ON A.社員ID=B.社員ID WHERE A.検査種別='C' AND ISNULL(B.社員ID,'')='' 見やすくするために前方の空白を全角スペースにしています。 使用される際は全角スペースを半角スペースに変更してください。
お礼
ありがとうございます。 SQL・DB素人なので大変勉強になりました
- bin-chan
- ベストアンサー率33% (1403/4213)
テーブル名が示されてませんが「検査スタッフ」テーブルとします。 select T1.社員ID, T1.名前, T1.検査種別 from 検査スタッフ as T1, (select 社員ID, count(*) as 検査種別数 from 検査スタッフ group by 社員ID) as Ta, (select 社員ID from 検査スタッフ where 検査種別 = 'C') as Tb where T1.社員ID = Ta.社員ID AND Ta.社員ID = Tb.社員ID AND Ta.検査種別数 = 1 ; うーん、なんか美しくない。
お礼
ありがとうございます。 私自身、独学作成コードばかりなので力技的なプログラムが多く 後で見返すのがいやになるものが多いです(笑) SQLは身に付けると大変役立つので是非習得したいと思います。
関連するQ&A
- アクセス2003 SQL2000を使用してます。
いつもお世話になっています。 下記のようにAテーブルBテーブルを元に Cテーブルのようにデータを出力したいのですが、 SQL文がうかびません。 どなたか教えてください!! ●Aテーブル(取込データ) 名前 | コード1(主コード) ------------------------- 小林 | 100 小林 | 102 田中 | 110 町田 | 130 木村 | 160 木村 | 160 木村 | 180 ●Bテーブル(取込データ) コード1 | コード2 --------------------------- 100 | A 110 | C 130 | D 160 | E ●Cテーブル(出力データ/ABテーブル合体させたもの) ★ ※※※を表示させたい! ↓ここまでは表示はできている↓ 名前 | コード1 | コード2 -------------------------------------------- 小林 | 100 | A 小林 | 102 | ※※※ 田中 | 110 | C 町田 | 130 | D 木村 | 160 | E 木村 | 160 | E 木村 | 180 | ※※※ ↓表示したい内容。不明な点。↓ 名前 | コード1 | コード2 -------------------------------------------- 小林 | 100 | A 小林 | 102 | A 田中 | 110 | C 町田 | 130 | D 木村 | 160 | E 木村 | 160 | E 木村 | 180 | E 以上 よろしく御願いします!!
- ベストアンサー
- SQL Server
- GROUP BYを使ったSELECT文の総件数を求める方法
【表A】 列1 | 列2 ----------- 山田 | A 山田 | A 田中 | A 田中 | B 田中 | C 木村 | A 木村 | A 木村 | B 上記で列1・列2をグループ化した件数を求めたいのですが、Oracleだと SELECT COUNT(*) FROM (SELECT 列1,列2 FROM 表A GROUP BY 列1,列2) というSQL文で結果「6」が出力されますが、SQLServerではエラーとなってしまいます。 SQLServerで実現したい場合はどのように記述すればよろしいでしょうか?
- ベストアンサー
- SQL Server
- SQL文で
SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB 2 い 3 CC 3 う 4 DD 4 え
- ベストアンサー
- SQL Server
- エクセル:別ファイルからの抽出
エクセル:別ファイルからの抽出 エクセルにて、 あるファイルに A B C No 月 氏名 1 2010/11 佐藤 2 2010/10 山田 3 2011/12 田中 4 2010/10 田中 ・ ・ とあり、それを別ファイルで 2010/10とセルに入力してやると、B列の2010/10だけ抽出して 一覧にしてくれるようにしたいと考えております。 関数またはVBAにて処理する方法はありますでしょうか? A B C No 月 氏名 2 2010/10 山田 4 2010/10 田中 ・ ・ ※別ファイルにおいては順番は関係ないので、Noがなくても よいです。 恐縮ですが、お答え願えれば有難いです。
- ベストアンサー
- その他MS Office製品
- SQL
以下のようなテーブルがあり、 区分に2、3、4があれば抽出しないという SQL文を教えていただければと思います。 (SQLSERVER2000を使用しています) 名称 | 区分 テストa | 1 テストa | 1 テストa | 2 テストb | 1 テストb | 1 テストc | 1 テストc | 2 テストc | 3 テストc | 4 テストc | 5 テストd | 1 テストd | 1 テストd | 5 テストd | 5 テストd | 5 例でいくとテストaは区分が1、1、2で 2がはいっているので抽出しない。 テストbは1、1なので抽出する。 テストcは1、2、3、4、5で2、3、4がはいっている ので抽出しない。 テストdは1、1、5、5、5なので抽出する。 つまり結果としては テストaとテストdが抽出されるということです。 質問もままならないほどSQL初心者のため、 どうかご回答いただきたいと思います。 よろしくお願いします!!
- ベストアンサー
- SQL Server
- SQLについての質問
SQLについて質問があります。 以下のようなデータがあったとします。 項目1 項目2 項目3 項目4 ---------------------------- 1 A 300 1 2 A 400 1 3 A 300 0 4 B 200 1 5 B 200 1 6 B 100 0 7 C 200 0 8 C 300 0 9 C 600 1 ここから「項目4 = 1」のレコードを「項目2」で集約し 「項目3」のサマリを求めると 項目2 項目3 -------------- A 700 B 400 C 600 となりここからさらに「項目3 >= 500」となる、 元のレコードを抽出したいのですが このような複雑な処理を1度のSQL可能なのでしょうか? ご存知の方がいらっしゃいましたら、よろしくお願いいたします。 ・期待する結果 項目1 項目2 項目3 項目4 ---------------------------- 1 A 300 1 2 A 400 1 9 C 600 1
- 締切済み
- Oracle
- SQLの作成について
SQLの作成について 以下のようなDBがあるとします。 ---------------------- DB1(マスタ) 区分 フラグ 名称 A 1 男 A 2 女 B 1 車 B 2 飛行機 B 3 電車 C 1 コンビニ C 2 スーパー C 3 百貨店 D 1 デスクトップ D 2 ノート ---------------------- ----------------------- DB2 区分1 フラグ1 名称1 ・・・ 区分4 フラグ4 名称4 A 2 D 1 ----------------------- DB2の区分とフラグから、DB1を参照して 取ってきたDB1の名称をDB2に書き込みたいです。 名称の1つ毎に、SQLを発行し、それぞれ名称を取得するなら where DB1.区分=DB2.区分 and DB1.フラグ = DB2.フラグ みたいな感じでそのまま出来ると思いますが、 今は、1つのSQLでDB2の複数の名称を一気に取得したいと考えてます。 どのようなSQLが良いのでしょうか
- ベストアンサー
- Oracle
- SQLを教えてください!!
テーブルAとテーブルBがあり、両方に存在しないものを抽出してエラーとする処理を行いたいのですが、 どういうSQlを書いたらいいのか教えてください。 下記例としてテーブルにデータがあったとしたら、結果として 004 商品D 005 商品E 006 商品G というデータを抽出したいのですが・・ テーブルA テーブルB ------------- ----------------------- コード 商品名 NO コード 商品名 001 商品A 1 001 商品A 002 商品B 2 001 商品A 003 商品C 3 002 商品B 004 商品D 4 003 商品C 006 商品G 5 003 商品C 6 005 商品E
- 締切済み
- その他(プログラミング・開発)
- excelオートフィルタの検索条件をセルに入力したい
以下のようなexcelのリストがあるとします。 A B C~ 1 佐藤・鈴木 Aタイプ 2 田中・山田 Bタイプ 3 佐藤 Aタイプ 4 田中 Cタイプ 5 山田・鈴木 Cタイプ A列の"田"が含まれる行を抽出したい場合 オートフィルタをかけ、オプションの抽出条件の指定で "田"を含む、で検索すれば良い、というのはわかります。 ですが、この動作をもうちょっと簡単にできないかと思っています。 具体的には、以下のようにセルに入力して検索・抽出するとはできないでしょうか。 A B C~ 1 田 2 3 4 A B C~ 6 田中・山田 Bタイプ 8 田中 Cタイプ 9 山田・鈴木 Cタイプ (1、2行目=検索用 3行目=空き 4行目以降=リスト) 過去の質問で、同じようにセルに入力して抽出する方法を 聞いていた方がいらっしゃったので参考にしようと思ったのですが 方法がVBAを使ったもので、VBAの知識がまったく無いために さっぱり理解することができませんでした。 何か良い方法がありましたら教えていただけないでしょうか。
- ベストアンサー
- オフィス系ソフト
- Excelについ教えてください!
会社で、アルバイトの勤務時間を処理しなくてはなりません。 下記のようなexcelのファイルが1か月単位であがってきます。 A B C D 1 4/10 山田 16:00 退勤 2 4/10 佐藤 14:00 出勤 3 4/10 田中 14:00 退勤 4 4/10 山田 12:00 出勤 5 4/10 田中 9:00 出勤 6 4/9 田中 16:00 退勤 7 4/9 佐藤 15:00 退勤 これを、 A B C D 1 出勤 退勤 2 4/9 ●● ●● 3 4/10 ●● ●● 4 4/11●● ●● このように別シートに個人毎に日報として抽出したいのですが、うまくいきません。 vlookupだと一つの条件しか指定できませんよね・・・? 例えば、4/10の、且つ、山田の、且つ”出勤”の時間を(B3に)絞り出すなんてことはexcelの関数ではできないのでしょうか? よろしくお願いします。
- 締切済み
- Windows Vista
お礼
ありがとうございます。 無駄が無く、美しく処理動作しました。 いかんせん独学&素人なのでサブクエリの概念が中々難しいです。 でもサブクエリの効果が絶大なので頑張って勉強してみます。 (今まではクエリ→配列代入→クエリ→配列代入→…と処理させてました(汗))