
以下のテーブルから、ID(001)をキーワードにしてステータスが対になっていない行だけを抜き出して表示させたいのですが、宜しくご教示願います。
【テーブル】
ID ステータス 組織ID 業務ID 名前
----------------------------------------
001 000 00100 0000001 田中
001 001 00100 0000001 田中
001 000 00100 0000002 鈴木
001 001 00100 0000002 鈴木
001 000 00100 0000003 山田
001 000 00100 0000004 佐藤
001 001 00100 0000004 佐藤
001 001 00100 0000005 伊藤
002 000 00101 0000006 吉田
002 001 00101 0000006 吉田
【期待する結果】
ID ステータス 組織ID 業務ID 名前
----------------------------------------
001 000 00100 0000003 山田
001 001 00100 0000005 伊藤
ステータスは基本、000と001は対になっている為、
対になっていないステータスを持つユーザーを抽出したい。
PHPに組み込まれている為、下記の様に$key(ID)を検索キーワードとして式に含めています。
SELECT ID,STATUS,DEPTID,MEMBERID,NAME FROM A_TABLE WHERE ID IN (' .$key .')
No.2ベストアンサー
- 回答日時:
質問はoracleということで若干書き方は違うかもしれませんが
・元データ
create table tbl(id char(3),status char(3),sid char(5),gid char(7),name varchar(20));
insert into tbl values
('001','000','00100','0000001','田中'),
('001','001','00100','0000001','田中'),
('001','000','00100','0000002','鈴木'),
('001','001','00100','0000002','鈴木'),
('001','000','00100','0000003','山田'),
('001','000','00100','0000004','佐藤'),
('001','001','00100','0000004','佐藤'),
('001','001','00100','0000005','伊藤'),
('002','000','00101','0000006','吉田'),
('002','001','00101','0000006','吉田');
・集計
select gid from tbl group by gid having count(status)=1;
※結果:0000003と0000005が得られるので
・最終処理
select * from tbl as t1 where exists(
select gid from tbl group by gid having count(status)=1
and gid=t1.gid)
No.1
- 回答日時:
> ID(001)をキーワード
これは仕様が微妙ですね、IDとステータスの組み合わせは複数あるので
業務ID(もしくは名前)ごとになどの条件になるので?
例示のサンプルですと
group by 業務ID having count(*)>1
的な処理が一番単純な処理になります
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECTで1件のみ取得するには?
-
Date型にNULLをセットしたい V...
-
☆☆☆☆SQL Olacle 3つ以上の文字...
-
sqlplusの処理が途中でとまる
-
ORDER BY 半角カナ
-
PostgreSQLで小数点以下を処理...
-
SQL>UPDATEと同時にその件数を...
-
何にかが違うから エラーなんで...
-
OracleのSQL*PLUSで、デー...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
実績累計の求め方と意味を教え...
-
レコードセット(ADO.Recordset)...
-
DataGridViewの内容をDBに反映...
-
ACCESSの集計クエリで3件ある...
-
GROUP BYを使ったSELECT文の総...
-
レコードが存在しなかった場合
-
DataGridViewの、選択されてい...
-
MERGE文を単体テーブルに対して...
-
固有レコード識別子の選択とは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Date型にNULLをセットしたい V...
-
SELECTで1件のみ取得するには?
-
sqlplusの処理が途中でとまる
-
SQL>UPDATEと同時にその件数を...
-
☆☆☆☆SQL Olacle 3つ以上の文字...
-
oracleのinsert select性能
-
文字列を連結した後に1つの変...
-
ORDER BY 半角カナ
-
Accessでテーブル名の変更
-
異なるDB間でのJOINやVIEWについて
-
プロシージャで変数をテーブル...
-
マクロの編集方法を教えて下さい。
-
PostgreSQLで小数点以下を処理...
-
存在するデータの一覧を出すには?
-
AccessVBAでリンクテーブルの参...
-
ACCESSのSQLの書き方
-
PLSQLで変数に格納されたSQL文...
-
時間集計につて
-
オラクル オブジェクトのデー...
-
SELECTについて
おすすめ情報
コメントありがとうございます。
IDと書いたのが誤解を招いてしまいますね。
わかりやすく言えば、申請ごとの通し番号です。
業務IDは個人に振られた個人コードのことです。
申請番号を検索キーにして、ステータスが対になっていない行を抜き出したいのです。
たぶん、group by 業務ID having count(ステータス)=1
だと思うのですが、なかなかうまくいきません…