- ベストアンサー
【SQL】1つのレコード内にある複数のデータの集計
1つのテーブルの1つのレコード内に、以下のような複数のBooleanデータがあって、trueがいくつあるかを数えたいのですが、1つのSQLで記述できるでしょうか? ID data1 data2 data3 data4 ... 1 true false true false ...
- mtkame
- お礼率70% (291/411)
- SQL Server
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
・Accessの場合 SELECT IIF(data1,1,0)+IIF(data2,1,0)+IIF(data3,1,0)+IIF(data4,1,0) AS 個数 FROM TABLE ・SQL Serverの場合 SELECT CASE WHEN data1 THEN 1 ELSE 0 END+CASE WHEN data2 THEN 1 ELSE 0 END+... AS 個数 FROM TABLE もしかしたら、単純に SELECT data1+data2+data3+data4 AS 個数 FROM TABLE でもOKの場合もある。
その他の回答 (1)
- NoMusicNoLife49
- ベストアンサー率63% (14/22)
こんにちは。 以下のようにすれば取得できます。 SELECT COUNT(data) FROM( SELECT ID,data1 AS data FROM テーブル UNION ALL SELECT ID,data2 AS data FROM テーブル UNION ALL SELECT ID,data3 AS data FROM テーブル UNION ALL SELECT ID,data4 AS data FROM テーブル UNION ALL SELECT ID,data2 AS data FROM テーブル ) AS TBL WHERE ID='1' AND data = 'True'
お礼
なるほど、やはり全部のカラムを列挙していくしかないようですね。当然ですが… ありがとうございました。
関連するQ&A
- 検索対象のデータが「複数レコード」を「1レコード」として獲得するSQL
教えて下さい。 SQLの理解が乏しく、難航しています。 検索対象のデータが複数レコード存在するのですが、 それぞれのレコードの特定の項目を区切り文字で区切 ったデータとして1レコードとして獲得するSQLがあ ればと思いました。 イメージ) テーブルA ID shapeID name 1 1 交通安全 1 2 防火管理 2 1 什器 3 1 セキュリティー 区切り文字","とし、IDを1で検索した表示結果 交通安全,防火管理 教えてgooで調べてみると、「縦方向のデータを横方向 にするのは、SQLは苦手」とありました。 やはり無理なのでしょうか? 宜しくお願いします。
- 締切済み
- Oracle
- 同一レコードを複数取り出したい
以下のようなテーブルがあったとます。 <AA table> A B ------ 01 2 02 3 03 4 A = '01'のレコードを取り出す場合には、 select * from AA where A = '01'; A B ------ 01 2 で取れますが、このときBの値を判断して、以下のようにBの数だけ同一レコードを取り出したいと思います (where A = '01'ならば) A B ------ 01 2 01 2 (where A = '03'ならば) A B ------ 03 3 03 3 03 3 03 3 このように、同一レコードを条件によって複数取り出す処理をSQLで記述することはできるのでしょうか?
- ベストアンサー
- Oracle
- SQLで1つのレコードから複数行挿入するには
下記のようなレコードがあります。 node_id_1 node_nm_1 node_id_2 node_nm_2 ------------------------------------- 00001 AAAA 00002 BBBB 00003 CCCC 00004 DDDD このレコードを元に下記のようなデータを別テーブルに挿入したいのですが、SQLで可能でしょうか id node_id node_nm ----------------- 1 00001 AAAA 1 00002 BBBB 2 00003 CCCC 2 00004 DDDD idはシーケンスで取得します。そして、同一レコードだったものには同じidを振ります。 DBはPostgreSQL 8.4です。
- ベストアンサー
- PostgreSQL
- レコード集計のSQLについて
お世話になります。 SQL Serverに関する質問です。 以下の内容を満たすSQLを作成したいのですが、 方法がわからず困っています。 (内容) *************************************************************** ・Aテーブル、Bテーブルには、以下のレコードが格納されています。 [Aテーブル] | key_code | code1 | code2 | code3 | money | person | ← カラム名 ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- | 001 | 1 | 2 | 1 | 3000 | 10 | ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- [Bテーブル] | key_code | cd1 | cd2 | cd3 | cd4 | cd5 | ・・・・・ | cd10 | ← カラム名 ------------------------------------------------------------ | 001 | 01 | 02 | 10 | 30 | 51 | ・・・・・ | 90 | ------------------------------------------------------------ | 002 | 01 | 02 | 03 | 10 | 40 | ・・・・・ | 55 | ------------------------------------------------------------ ・Aテーブルの key_code とBテーブルの key_code を関連付けて、 Bテーブルのcd1~cd10に格納されている各コード単位に集計した Aテーブルのmoney及びpersonの値を取得したい。 例えば、 key_code = '000' でAテーブルとBテーブルを関連付けして、 Bテーブルのcd(1~10) = '10' で集計した Aテーブルの money と personの 値を求めたい。 **************************************************************** 初歩的な質問で申し訳ございませんが、 どなたかご教授願えませんでしょうか? よろしくお願いいたします。
- 締切済み
- SQL Server
- AccessVBA レコードの更新
私の環境はOS:Xp ACCESS2000です。 宜しくお願いします さっそくで失礼かとは思いますが、 lngIdx = 1 Do While rs.EOF = False sql = "update 設備管理2_3改テーブル set " & vbCrLf sql = sql + " ID = '" & lngIdx & "'" & vbCrLf lngIdx = lngIdx + 1 rs.MoveNext Loop これでテーブルに格納されている「ID」という箇所をレコード単位で一つずつ変更していくのは無理なのでしょうか? やってみて無理だったんですけども。 どう記述したら、レコードを一つずつ更新出来るのでしょうか?
- ベストアンサー
- オフィス系ソフト
- 集計のSQL文について
SQLでの集計方法について質問です。 Oracle8iを使用しています。 あるテーブルに以下のようなレコードがあります。 ID 回数 値 1 1 100 1 2 200 1 3 300 2 1 150 2 2 550 .... この登録されている値をそのIDごとに、その回数まで回数ごとにサマリーした結果を出力したいのですが どうすればよいでしょうか。 ID 回数 値 1 1 100 ・・・(100) 1 2 300 ・・・(100+200) 1 3 600 ・・・(100+200+300) 2 1 150 ・・・(150) 2 2 700 ・・・(150+550) 宜しくお願いします
- ベストアンサー
- Oracle
- <SQL>条件付きで最小値レコードを抽出する方法
SQLite3.7.5を使っています。 以下<抽出前>の様なテーブルから、col2の値が"FALSE"で(col1=3,4,5の3つ)かつ、col3が最小値(col3=3)であるレコードを<抽出後>のように抽出するSQL文をご教示ください。 <抽出前> col1 | col2 | col3 1 | true | 3 2 | true | 0 3 |false | 3 4 |false | 5 5 |false | 3 <抽出後> col1 | col2 | col3 3 |false | 3 5 |false | 3 自分で考えたSQL文は以下です。 抽出結果は問題ないのですが、同じSELECT文を2回書いていてだいぶ効率悪いことをしているのではないかと思い質問しました。 よろしくお願い致します。 SELECT * FROM (SELECT * FROM test WHERE (col2 = false)) WHERE col3 = (SELECT min(col3) FROM (SELECT * FROM test WHERE (col2 = false)))
- ベストアンサー
- その他(データベース)
- 複数レコードのテーブルであるレコードだけ増やしたい
お世話になります。 複数レコードがあるテーブルにて、あるレコードだけカウントアップする為のSQL文はどのように記述すれば良いでしょうか? 要件: テーブル名'名簿'の No, 名前, 更新者, 備考に 01, 芥川龍之介, ほげ太, NULLを入力し 備考は書き込みさせるためとりあえずNULLを代入しておき 名前と更新者は同じで、Noの部分だけを01~10までカウントアップさせたい 何卒、ご教授のほど、宜しくお願いします。
- ベストアンサー
- PostgreSQL
- SQLの書き方
はじめまして SQL Serverを使用していますが、下記のSQLの書き方がわかりません。 申し訳けありませんが、わかる方がいらっしゃいましたら、どなたか教えて下さい。 ◆質問 テーブル1とテーブル2の下記のKEYで結合させて、取り出した結果でテーブル3を更新したいです。 テーブル2はデータが複数件一致してしまうため、無条件に先頭の1レコードだけを取り出したいです。 取得できたテーブル2のid_1とid_2とid_3をテーブル3に書き出したいです。 ○KEY テーブル1.test = テーブル2.test and テーブル1.test1 = テーブル2.test1 テーブル1.id_2 = テーブル3.id_1 and テーブル1.id_3 = テーブル3.id_2 ○テーブル1 id_1 id_2 id_3 test test1 bbb 000001 001 000001 100 bbb 000002 001 000002 100 ○テーブル2 id_1 id_2 id_3 test test1 aaa 1 99 000001 100 ← このレコードを取り出したい aaa 2 99 000001 100 aaa 3 99 000003 100 aaa 4 99 000004 110 ○テーブル3 id_1 id_2 id_3 000001 001 aaa-1-99 ←id_3にテーブル2で取得できたid1 + id2 + id3を書き出したい 000002 001 夜遅くにすみませんがお願いします。
- ベストアンサー
- SQL Server
- アクセスで複数レコードを1レコードにできますか?
アクセスで複数レコードを1レコードにできますか? お世話になります。 お教えください。 以下のようなレコード(テーブル)があります。 氏名 日付 金額 aaa 5/12 200 aaa 5/24 500 bbb 5/01 300 ccc 5/04 100 これを aaa 5/12 200 5/24 500 bbb 5/01 300 ccc 5/04 100 のようにデータを表示(クエリで)したいのですが どのようにしたらいいでしょうか?
- ベストアンサー
- その他(業務ソフトウェア)
お礼
早速の回答をありがとうございます。 > SELECT CASE WHEN data1 THEN 1 ELSE 0 END+CASE WHEN data2 THEN 1 ELSE 0 END+... AS 個数 FROM TABLE これをデータの個数だけ並べる必要があるということですね。 カラム数が多い場合は大変ですね...^^;