質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

149閲覧

SQL:行内の文字列のカウント

tynko

総合スコア18

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/08/31 12:00

画像1のようなテーブルがあった際に、同じ行内で文字列の数を数えて、
カラムを作ることは、SQLにて可能なのでしょうか?
画像1における、橙色の部分にそれぞれ数字を足し上げていれるようなイメージです。

・そもそもSQLでそのような処理が可能なのか?
・処理ができるとすると、どのような関数を使えばいいのか?

SQLに詳しい方、ご教示いただけますと幸いです。

どうぞよろしくお願いいたします。

画像1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

CASE式を使えばやろうとしていることは可能だと思います。

が、そもそもテーブル設計がイケてないせいで「こんなことできるの?」みたいなトリッキーなことをやるハメになっているんじゃないでしょうか。
私ならこうします。

  • くじ結果コードマスタ
コード(PK)名称
0不参加
1参加
2当選
  • くじびき
ユーザID(PK)回(PK)くじびき結果コード
A11
A22
B12
B20
F21
  • くじびきサマリ(どうしても永続化が必要なら)
ユーザID(PK)不参加回数参加回数当選回数
A021

こういうふうに設計すれば、くじびきテーブルからユーザとくじびき結果コードによって絞ったレコード数を取得するだけで、回数のカウントが可能になります。
SELECT UPDATEとかINSERT...SELECTとか言われるもので更新・挿入すれば一発です。

投稿2018/08/31 13:36

spookybird

総合スコア1803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tynko

2018/09/02 05:12

ありがとうございます。私のスキルレベルが追いついておらず、SELECT UPDATEとかINSERT...SELECTというのが、まだ理解できておらず、、、、上記の方のやり方で解決をいたしました。 取り急ぎ御礼申し上げます。 もう少し学んだ段階で、SELECT UPDATE、NSERT...SELECTを使ってみたく思います。
spookybird

2018/09/03 06:51

解決後ですが、コメントしておきますね。今後の参考になれば。 私が回答した方法、なにもSELECT UPDATEやINSERT SELECTを使わなければならないわけではありません。「取得して更新」を一気にやろうとするとそれらの方法が必要になりますが、アプリケーション側で取得して、その情報をもとに更新しに行けば問題なく動作します。 あれこれ一気に解決しようとすると何事も難易度が上がってしまうので、できるだけやることを分解、単純化して考えるといいと思います。 その結果プログラムが冗長になることもありますが、その冗長な初プログラムをブラッシュアップしていく作業がとてもいい勉強になりますよ。
guest

0

ベストアンサー

条件を付けて足していけば良いだけです。

SQL

1select ユーザー 2 , case くじ引き1回目 when '不参加' then 1 else 0 end 3 + case くじ引き2回目 when '不参加' then 1 else 0 end as くじ引き総不参加回数 4 , case くじ引き1回目 when '参加' then 1 else 0 end 5 + case くじ引き2回目 when '参加' then 1 else 0 end as くじ引き総参加回数 6 , case くじ引き1回目 when '当選' then 1 else 0 end 7 + case くじ引き2回目 when '当選' then 1 else 0 end as くじ引き総当選回数 8from テーブル

別パターン。

SQL

1select ユーザー 2 , sum(case くじ引き結果 when '不参加' then 1 end) as くじ引き総不参加回数 3 , sum(case くじ引き結果 when '参加' then 1 end) as くじ引き総参加回数 4 , sum(case くじ引き結果 when '当選' then 1 end) as くじ引き総当選回数 5from ( 6 select ユーザー, くじ引き1回目 as くじ引き結果, 1 as くじ引き回数 from テーブル 7 union all select ユーザー, くじ引き2回目, 2 from テーブル 8) as t 9group by ユーザー

何にしてもテーブル構造が正規化されていないので、面倒な記述になるのは避けられないですね。

投稿2018/08/31 15:54

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tynko

2018/09/01 11:44

ご丁寧な回答ありがとうございます。助かります。ひとまず、いただいた内容をもとに、実施してみます。
tynko

2018/09/02 05:09

ありがとうございました!上記のやり方で解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問