X



トップページDB@2ch掲示板
1002コメント319KB
SQL質疑応答スレ 18問目
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2018/01/04(木) 22:12:22.14ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 17問目
https://mevius.5ch.net/test/read.cgi/db/1468157341/
0224NAME IS NULL
垢版 |
2018/04/04(水) 13:11:13.69ID:???
>>223
おそらくデータベースに設定している文字セットで不整合があるんだろうと思いますが
MySQLの設定方法に関する質問の場合は、ここで聞くよりも、
MySQL 総合 Part26
https://mevius.5ch.net/test/read.cgi/db/1499949595/
で聞いた方が良いかと思います。

MariaDBに関するスレもあります。覗いてみると良いかもしれません。
https://mevius.5ch.net/test/read.cgi/db/1360677476/
0225NAME IS NULL
垢版 |
2018/04/04(水) 16:32:49.81ID:+pp14tKO
誤爆かもな
0226NAME IS NULL
垢版 |
2018/04/04(水) 21:47:48.32ID:???
with句で取得した数列を別のテーブルでその数列と一致するレコードを取得したいんだけどどうすればいいでしょう?
withで別で取得したリスト名Aとし取得結果がBだとすると
select ※ from X
where X.C IN (SELECT B FROM A)
で取得しようとしたんだが上手くいかずいろいろとぐぐってみたけどわからなかったです・・・
0227NAME IS NULL
垢版 |
2018/04/04(水) 21:48:51.99ID:tDmvnrOB
DB名も書けないとか
0228NAME IS NULL
垢版 |
2018/04/04(水) 22:51:56.44ID:???
withで別で取得したってのが意味わからん
その部分を含めてどうやろうとしたのか書けば答えようもあるが
0229NAME IS NULL
垢版 |
2018/04/04(水) 23:31:43.42ID:???
すみません。書き方が悪かったです。
使用しているのはoracleです。
with A AS (SELECT X FROM Z
GROUP BY X)
SELECT COUNT(※) FROM B
WHERE B.C IN(SELECT X FROM A)
のような文を書いてエラーとなりました。
イメージ的にはZテーブル上のXの数列についてBテーブルに何件存在するかを確認したいです。
023060改め神 ◆YDp73vGOso3d
垢版 |
2018/04/04(水) 23:59:17.52ID:???
参考書でも開けばそんくらいわかんだろゴミ
早くお前ら答えろや
スレチの質問には誘導して俺の質問には答えないって根性捻れまくりだろお前ら
0231NAME IS NULL
垢版 |
2018/04/05(木) 01:39:19.17ID:l3AE4+ue
「Xの数列」という説明が他人には理解できない。

Xがひとつの列だとするとなぜグループ化なのかわからない。

さらに再帰クエリにして、別のSELECT文のINリストのSELECT文にしているのも意図がくみにくい。

かなり単純なことを聞いていると予想はできるが、なぜこんなに難しく考えているのか?
0232NAME IS NULL
垢版 |
2018/04/05(木) 06:25:28.48ID:???
本当に>>229の通りに書いているならcount(※)がcount(*)の間違いだが
それ以外に致命的な間違いは見当たらない
まあこう書いても同じ意味にはなる
select count(*) from B inner join Z on B.C = Z.X;
0234NAME IS NULL
垢版 |
2018/04/05(木) 19:22:56.90ID:l3AE4+ue
再帰のないWITHを再帰クエリと呼ぶなということか。

ただOracleは再帰があってもなくてもただWITHと書いて、再帰のないWITHと言ったりするからそう書いた。

標準SQLではWITH RECURSIVEと書かないといけないが、Oracleはたしかこの構文がない気がする。
0235NAME IS NULL
垢版 |
2018/04/05(木) 19:24:12.57ID:l3AE4+ue
他人のミスに厳しいならそう自己紹介してくれ。
0236NAME IS NULL
垢版 |
2018/04/05(木) 20:02:25.68ID:???
ではまずご自身からどうぞ
0238NAME IS NULL
垢版 |
2018/04/05(木) 21:29:58.31ID:???
>>232
B.CかZ.Xの少なくともどちらかがユニークでないと同じ意味にはならん
0239NAME IS NULL
垢版 |
2018/04/06(金) 00:33:07.86ID:GwnuWxH/
このスレはSQL入門スレなのかSQLオタクスレなのか?

よくわからない質問に、エスパー回答をするというIT技術者の間ではあまりないやりとりが多い。
0240◆YDp73vGOso3d
垢版 |
2018/04/06(金) 01:28:52.77ID:???
テンプレ見ろゴミ
ここは初心者用スレだよ
なのに俺の質問は基礎的すぎるとかいう謎老人のおかげで誰も答えんのや
まじでゴミSEは右ならえの自我すら持たない穢多非人よ
0241NAME IS NULL
垢版 |
2018/04/06(金) 08:24:33.64ID:???
いつまで粘着してんだ、このキチは
0242NAME IS NULL
垢版 |
2018/04/06(金) 12:19:44.04ID:1nt8ANDW
>>239
IT技術者の間ではよくわからない質問によくわからない回答をして
お互い納得するのがデフォルトスタンダードですものねw
0243NAME IS NULL
垢版 |
2018/04/06(金) 12:43:29.95ID:???
ここはわざと言い間違えるスレか?
0244NAME IS NULL
垢版 |
2018/04/06(金) 12:58:57.72ID:GwnuWxH/
まず質問者が無礼。回答者がとりあえず想像で回答。これがこのスレが機能していない理由。
0245NAME IS NULL
垢版 |
2018/04/06(金) 13:59:04.00ID:GwnuWxH/
>>240
初心者向けであれば、SQLを回答するのではなく、何をしようとしているのを確認するのが先です。できればいい論をデータベース板で確認するのはおかしいので、プログラム板やプログラマ板で質問すべきです。
0246◆YDp73vGOso3d
垢版 |
2018/04/06(金) 20:23:48.23ID:???
>>245
わかったわかったお前の意見とかどうでもいいわ
文体見るだけで中年のごみおっさんってわかるわやばいよ君?
0247NAME IS NULL
垢版 |
2018/04/06(金) 20:45:46.08ID:???
匿名の掲示板で誰でも書き込めるんだから
気に入らなければスルーすれば良いだけ
質問者が無礼って、お前に害悪を加えてきたわけじゃあるまいし
0248NAME IS NULL
垢版 |
2018/04/06(金) 21:22:42.32ID:+EV0F8Wd
助けてください。
ACCESSのDBなんですが、
tblAは、[id][なまえ][電話番号][性別][入会日]というフィールド構成のマスター名簿
tblBは、[id][入金日][入金額]というフィールド構成です。

このテーブルを元に、ACCESSやEXCELのVBA上で、

[id] [なまえ] idごとの[入金額]の合計 WHERE 昨日=<[入金日] <= 明日

というレコードセットを取得したいです。
tblBの集計に、tblAからもってきたなまえフィールドをくっつけたい、という感じです。
INNER JOINとか、そういうのを駆使して、なんとかひとつのSQL文を作りたいのですが、
うまくいきません。
どなたか、SQL文そのものをご教示ください。
お願いします。
0249NAME IS NULL
垢版 |
2018/04/06(金) 21:55:43.69ID:???
>>248
このままだとよくわからん
「誰が」入金したという情報はどこで管理しているの?
0250NAME IS NULL
垢版 |
2018/04/06(金) 22:00:07.59ID:+EV0F8Wd
>>249
すみません。idというのは、メンバーidのことです。レコードidではありません。
わかりづらくてすみません。

メンバー(マスターで、idから名前がわかる)による入金の記録がBテーブルです。
それぞれのメンバーが、合計でいくら入金したのか、を集計したいのですが、
Bテーブルにはidしかなく、集計表には名前も欲しいので、Aテーブルから持ってきたいのです。
0251◆YDp73vGOso3d
垢版 |
2018/04/06(金) 22:08:41.64ID:???
>>250
君質問する以前の問題だよ?
あと今質問受け付けてないからばいばい
0252NAME IS NULL
垢版 |
2018/04/06(金) 22:09:44.34ID:???
>>250
えーと
同じ日に2件以上の入金はないということ?
0253NAME IS NULL
垢版 |
2018/04/06(金) 22:12:55.34ID:+EV0F8Wd
>>252
ありえます。
なので、SUM[金額] GROUP BY id としたいです。
0254NAME IS NULL
垢版 |
2018/04/06(金) 22:20:07.86ID:???
>>253
そもそもテーブル設計がまずいのでは
同じ人が同じ日に同じ金額を入金したらどうなるの?
主キーは?
0255NAME IS NULL
垢版 |
2018/04/06(金) 23:15:05.62ID:+EV0F8Wd
Bテーブルにはオートナンバーのridフィールドがあります。
0256NAME IS NULL
垢版 |
2018/04/07(土) 04:28:00.74ID:???
GROUP BY [id],[なまえ]
0257NAME IS NULL
垢版 |
2018/04/07(土) 09:47:12.83ID:???
>>248
Accessは知らんが一般的なSQLではこんな感じ

select A.id,
    A.なまえ,
    B.合計
from  tblA A
    inner join
    (select id,
        sum(入金額) as 合計
    from  tblB
    where  入金日 between 昨日 and 明日
    ) B
    on A.id = B.id
;
0258257
垢版 |
2018/04/07(土) 09:48:19.23ID:???
サブクエリ内にgroup by id書くの忘れた
0259NAME IS NULL
垢版 |
2018/04/07(土) 15:34:15.71ID:???
>>248
accessで作ってやったぞ
これでどうだ。

SELECT tblA.ID, tblA.[なまえ], Sum(tblB.入金額) AS 入金額の合計
FROM tblA INNER JOIN tblB ON tblA.ID = tblB.ID
WHERE (((tblB.入金日)>='2018-04-06' And (tblB.入金日)<='2018-04-08'))
GROUP BY tblA.ID, tblA.[なまえ]
ORDER BY tblA.ID;
0262NAME IS NULL
垢版 |
2018/04/15(日) 00:36:03.26ID:???
>>4 のよくある質問2で、keyに別テーブル?配列?を指定することはできますか。
(key=3など、BDにない項目のカウント結果は当然ゼロになるが、それも結果として欲しい)

1〜12の数値(月)で集計するとか、47都道府県をキーとするとか、
ニーズはありそうなので方法もあるように思うのですが。

DBは、Google Fusion Tablesです。
0263NAME IS NULL
垢版 |
2018/04/15(日) 00:56:40.79ID:???
>>262
具体的にテーブルの内容を例示してみて
0264NAME IS NULL
垢版 |
2018/04/15(日) 01:11:20.64ID:???
outer joinのことを言いたいんだと思う
0265NAME IS NULL
垢版 |
2018/04/15(日) 01:41:28.73ID:???
OUTER JOIN? …慌ててググる…そうそうそれです!

Google Fusion TablesはWHERE句で関数が使えないなどSQLはやや貧弱なのですが、
OUTER JOINはあるようなので(LEFTだけ?)勉強してやってみます。
ありがとうございました。
https://developers.google.com/fusiontables/docs/v2/sql-reference
0266◆YDp73vGOso3d
垢版 |
2018/04/15(日) 17:01:53.04ID:Bs6Qpy/T
おいおいおいおいouter joinとかいう初心者以前の質問には答えて
俺の質問には答えんのかい
お前らほんと捻くれてるな
これだからSEとかいうオタク共はいじめたくなるんだよなあ
0268NAME IS NULL
垢版 |
2018/04/19(木) 00:19:53.73ID:ACyU9sdk
>>266
答えられんのはプログラマーとかゆうコーダーだろ
SEとゆうのは俺様みたいな有能のことたぜボーイ!
0269NAME IS NULL
垢版 |
2018/04/19(木) 01:05:53.36ID:pgNamYVa
>>268
you?
0270NAME IS NULL
垢版 |
2018/04/20(金) 20:42:22.38ID:cUph+NAS
>>269
なんや?SE様に何か用か?
0271NAME IS NULL
垢版 |
2018/04/28(土) 20:00:00.97ID:???
テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど
この値がどのidなのか毎回自分でテーブル確認してinsertするのが大変で困ってます
リストボックスみたいなので'ゆうちょ'を選んだら(bank_id=)3みたいに支援してくれる機能ってSQLでできませんか?
RDBMSはMySQLでLinuxのターミナル使ってます
0272NAME IS NULL
垢版 |
2018/04/28(土) 21:05:32.03ID:???
それはSQLではなくWeb画面等使って選択させれば良いだろう
0273NAME IS NULL
垢版 |
2018/04/28(土) 21:36:58.41ID:f64A+t1T
>>271
SQLの話ではないな。
0274NAME IS NULL
垢版 |
2018/04/28(土) 22:38:37.03ID:???
ACCESSでも使ってろ
0275NAME IS NULL
垢版 |
2018/04/29(日) 03:58:48.45ID:uDICrjO7
>>271
IDを使わず銀行名でやってみてください。

自分が経験しなければ、なぜそうした方がいいのか、わかりませんよ。
0276NAME IS NULL
垢版 |
2018/04/29(日) 10:54:53.31ID:???
>テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど

それは分かってるっていうよりメリットデメリット理解しないまま鵜呑みにしてるだけだよね。
どうせ鵜呑みにするなら教科書通りのリレーショナルDB設計から入ればいいのに。
0277NAME IS NULL
垢版 |
2018/04/29(日) 11:08:37.04ID:???
更新時のレコード件数を減らしたり情報の集約・一元化がメリットですよね。ざっくりとは理解してるつもりです。
ただターミナルからSQLで複数のレコードを追加するには自力でテーブル確認する必要あるのが使いづらいなと思って
0278NAME IS NULL
垢版 |
2018/04/29(日) 11:34:58.17ID:???
select bank_id from m_bank where bank_name = ’ゆうちょ’

こんなサブクェリーを追加SQLに埋め込む
0279NAME IS NULL
垢版 |
2018/04/29(日) 12:34:02.47ID:???
>>278
こういうときに副問合せ使うんですね、使いやすそうで凄く良さそう。
早速使ってみます。
ありがとうございます。
0280NAME IS NULL
垢版 |
2018/04/29(日) 13:38:14.58ID:uDICrjO7
マスタテーブルではないのか?
0281NAME IS NULL
垢版 |
2018/04/29(日) 14:23:08.00ID:???
>複数のレコードを追加するには自力でテーブル確認する必要ある

これの意味が判らん
0282NAME IS NULL
垢版 |
2018/04/29(日) 18:36:41.80ID:???
説明下手ですみません。
初心者なのですごく初歩的な質問でした。
取り敢えずサブクエリで解決しましたが一応

habook:
id, money, method_id
...
135, -5000, 58
...

method:
method_id, method_name
...
58, 'ゆうちょ銀行'
...

INSERT INTO habook VALUES (200, -1000, ???)
method_idが多くてゆうちょ銀行のidがパッと思い出せなくて詰まる
methodテーブルを自分で確認してソニー銀行のidを調べてinsertに打ち込む

同じような感じで外部キーの列が増えるとインサートする度に自分で調べる必要があって大変になってきたのでなにかいい方法ないか聞きました。


混乱させてすみません。
0283NAME IS NULL
垢版 |
2018/04/29(日) 18:57:21.95ID:???
使用しているのはoracle SQLです。
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?
0284NAME IS NULL
垢版 |
2018/04/29(日) 19:30:40.63ID:???
学校の宿題みたいな設問だな
0285NAME IS NULL
垢版 |
2018/04/29(日) 19:48:09.61ID:i1PXJR4v
>>282
自分でそういうプログラムを作ればいい。
0286NAME IS NULL
垢版 |
2018/04/29(日) 19:49:09.41ID:i1PXJR4v
>>284
トランザクションデータをトランと略しているあたりから、どこかの会社だろう。
0287NAME IS NULL
垢版 |
2018/04/29(日) 19:49:26.43ID:ccXAu8y/
同姓同名には考慮しなくて良いの?
0288NAME IS NULL
垢版 |
2018/04/29(日) 19:51:35.86ID:i1PXJR4v
>>283
外部キーが社員番号ではなくて名前なのはネタだからか?
0289NAME IS NULL
垢版 |
2018/04/29(日) 22:10:20.38ID:???
>>282
どのぐらいの頻度でSQL使うかわからんけど、こんなのでもいいんかね
insert into habook(id, money, method_id)
select 200, -1000, method_id from method where method_name='ゆうちょ銀行'
0290NAME IS NULL
垢版 |
2018/04/29(日) 22:12:28.42ID:???
>>283
>>58と同じみたいなんだが、いまだにわからないのかw
0291NAME IS NULL
垢版 |
2018/04/29(日) 22:15:33.56ID:???
銀行は銀行名の変更とか合併とかあるから
そういった事も考えないといけない
0292◆YDp73vGOso3d
垢版 |
2018/04/30(月) 03:17:07.21ID:???
お前らはどうしても俺の質問には答えたくないみたいだな
0293NAME IS NULL
垢版 |
2018/04/30(月) 08:36:43.41ID:???
頼み方ってものがあるだろ
ほら言ってみろ
0294NAME IS NULL
垢版 |
2018/04/30(月) 10:55:57.85ID:FupcYnE7
コメントが一杯付いてて良かったじゃないか
0295NAME IS NULL
垢版 |
2018/04/30(月) 14:55:41.60ID:???
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?
0296NAME IS NULL
垢版 |
2018/04/30(月) 14:57:09.24ID:???
>>295
同じ名前の社員がいたとき、どうすれば良いの?
0297NAME IS NULL
垢版 |
2018/04/30(月) 15:03:04.31ID:???
結婚とか離婚して姓名変わったらどうすんだ
0298NAME IS NULL
垢版 |
2018/04/30(月) 17:56:27.86ID:???
もうここしか頼るところがございません。
SQL server7.0が、綺麗にwin10のPCだけつながらなくなりました。
「接続できませんでした。 SQL state'ST100'
SQL server エラー0
[microsoft][ODBC SQL server driver] ログインが時間切れになりました」
と出ます。どうすればいいのでしょうか
0301NAME IS NULL
垢版 |
2018/04/30(月) 19:16:11.68ID:L8ngFuqq
>>298
ああこれはログインが時間切れになってるね
ログインが時間切れにならないように注意しなよ
0303NAME IS NULL
垢版 |
2018/05/04(金) 20:14:40.86ID:???
外部キーって必ず他のテーブルの主キーじゃないとダメなの?
0304NAME IS NULL
垢版 |
2018/05/04(金) 21:31:51.25ID:???
主キーでなくてもUNIQUE制約がついていれば大丈夫だと思う
0305NAME IS NULL
垢版 |
2018/05/04(金) 22:29:19.11ID:GLAEl09j
>>303
>>304
これ自分も知りたいからageてみるか
0306NAME IS NULL
垢版 |
2018/05/05(土) 00:10:26.39ID:T65X27xi
>>303
一意制約の列でもよい。要は重複値を持っている列では外部キー制約に使用できない。
0307303
垢版 |
2018/05/05(土) 01:36:42.07ID:dfGZW7dT
>>304
>>306
ありがとうございますm(_ _)m
0308NAME IS NULL
垢版 |
2018/05/10(木) 23:54:50.05ID:???
DB殆ど触ったことないので分からないのですが、
1. SQLでは[ユーザー名, パスワード, [データA], [データB]] (便宜的にリスト形式にしています)
のようなDB構造は作れるのでしょうか?

つまり、ユーザー名とパスワードは1ユーザに1つずつ、データA,B,C、、、は内部に複数のデータを持つような構造です
ちなみに扱いたいSQLはpostgreSQLです

2. node.jsとpostgreSQLを使ってウェブアプリを作ろうと思っているのですが、postgreSQLでは最初にDB構造の宣言などはしなくて良いのでしょうか?

Swift + RealmでDBを使った際には、ユーザーモデルっていうDB構造?を宣言してから使ったので、少々混乱しています

3. node.jsとpostgreSQL(npmで)をWindowsにインストールしたのですが、postgreSQLが動きませんでした
WindowsにもpostgreSQLをインストールしなければいけないのでしょうか?


よろしくお願いします
0309NAME IS NULL
垢版 |
2018/05/11(金) 03:50:27.46ID:JrURJydT
MySQLです。数値を計算するSQL文ってあるでしょうか?

例えば、rankingテーブルに「access」と「click」というカラムがあるとします。
accessは×1でclickは×5にして、その合計数値が多い値(降順)で表示

みたいなことがしたいです。
0310NAME IS NULL
垢版 |
2018/05/11(金) 05:53:20.74ID:6wqBIw87
>>308
まずはDBを触りましょう
SQLではと書いているということは他ならわかるのでしょうか
RDBでは一般的に
[ユーザーID,ユーザー名,パスワード]
[ユーザーID,データ番号,データ]
のようなテーブルを作成してユーザーIDで結合します
これを正規化といいます

>>309
素直に
order by (ranking.access + ranking.click * 5) desc
でいけるかと
0311NAME IS NULL
垢版 |
2018/05/11(金) 17:09:15.29ID:???
SQL初心者です。
連続して1が立っている時間
(行数、データ数)は求められないでしょうか。
1が出てきたタイミングで後どれだけ続くかをその行に書き込みたいです。
0312NAME IS NULL
垢版 |
2018/05/11(金) 21:47:33.52ID:???
>>310
いけました!orderに計算するって概念がありませんでした。
とても勉強になりました。ありがとうございます
0313NAME IS NULL
垢版 |
2018/05/12(土) 09:16:12.16ID:???
>>311
どういうテーブル、イメージしてるデータの並びを書かないとレスつかないんじゃないか
0314NAME IS NULL
垢版 |
2018/05/12(土) 20:19:54.53ID:???
>>313
ありがとうございます。

A B
0 0
0 0
1 3
1 0
1 0
0 0
0 0

AからBを作りたいです。
Bの3は1が3つ続いていることを意味します。
0315NAME IS NULL
垢版 |
2018/05/12(土) 21:14:06.97ID:???
>>314
順序も規定せずに 「続いてる」とか言われてもなあ
Excel + VBA とかでやれば?
0317NAME IS NULL
垢版 |
2018/05/12(土) 21:39:12.17ID:???
>>315
>>316
No A B
0 0 0
1 0 0
2 1 3
3 1 0
4 1 0
5 0 0
6 0 0
7 1 2
8 1 0
9 0 0

例えばこの様な連番が有れば出来るものでしょうか。

すみません。
SQLで出来るのか?
出来るならどのような方法が有るのか
知りたいです。

よろしくお願いします。
0318NAME IS NULL
垢版 |
2018/05/12(土) 22:16:46.98ID:???
>>317
これで
2 1 3
7 1 2
がとれたらいいわけ?
時間っていってたわりにはそういう結果をかいてないが
0319NAME IS NULL
垢版 |
2018/05/12(土) 22:19:25.26ID:???
あとDBは何かしりたい
0320NAME IS NULL
垢版 |
2018/05/12(土) 22:28:15.77ID:???
最新の(つまりinsertする前の)NoでAが1で、かつ追加するデータのAが0だったら
直前のAが0のデータのNoを見る
例ならNoが9の時に0になったから直前のAが0のデータはNoが6だと。
んで、7,8が連続したものだった
だからNo7のBに2をセット

こんな感じ?
0321NAME IS NULL
垢版 |
2018/05/12(土) 23:17:44.19ID:???
>>318
分かりにくく申し訳ありません。
元々時系列のデータだったので
時間という書き方をしていました。
(何個続いたか知りたいのです)

NOとAの項目がある状態でBの項目
を追加したいと思っています。

318様のような結果でも構いません。

>>319
MSのSQL Serverです。申し訳ありませんが詳細なバージョンなどは不明です。

>>320
ありがとうございます。
書かれているようなことが
実現できればと思います。
0322NAME IS NULL
垢版 |
2018/05/12(土) 23:18:49.98ID:???
>>317
SQL文でやるならレコードを次々と参照しないといけないから再帰SQL使わないとだめだろうな
あるいはプロシージャでカーソル使う
あるいはプログラムでやる感じになる
0323NAME IS NULL
垢版 |
2018/05/13(日) 00:03:02.98ID:???
SQL Serverでなく、MySQLです、済みません。テーブル名はtと仮定しました。

create procedure setB()
begin
 declare done int;
 declare _flag int;
 declare _cnt int;
 declare _a int;
 declare _no int;

 declare cur cursor for select No,A from t order by No desc;
 declare exit handler for not found set done = 0;
 set done = 1;
 set _flag = 0;
 set _cnt = 0;
 
 open cur;
 while done do
  fetch cur into _no, _a;
  if _a = 1 and _no > 0 then
   update t set b = 0 where No = _no + 1;
   set _cnt = _cnt + 1;
  else
   update t set b = _cnt where No = _no + 1;
   set _cnt = 0;
  end if;
 end while;

 if _a = 1 then
  update t set b = 0 where No = _no;
 else
  update t set b = _cnt where No = _no;
 end if;
 close cur;
end;
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況