SQL初心者質問スレ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
伝票ID、顧客名、売上金額、売上月というテーブルがあるとします
顧客毎の各売上月の合計を問い合わせしたい場合どうすればいいのでしょうか?
売上月、顧客名、合計金額という風に出したいですが、一つ一つ顧客名毎に問い合わせするしかないのでしょうか? >>683
それぞれの顧客に電話して聞くしかないな。 select `顧客名`,`売上月`,sum(`売上金額`) as `合計金額` from TABLE
group by `顧客名`,`売上月`; SQLの神さま、み教えを!
二つのテーブルを比較し、複数項目(7項目)の値が全て合致した行の
1項目をアップデートをしたいのですが、長ったらしいSQLになってしまいます。
シンプルな記述で実現する方法は、ありますでしょうか?!
お願いします! 長ったらしくならないので下手なことをせずそのままがいいように思う Oracleだと
where (a1, a2, ...) = (b1, b2, ...)
みたいに書けちゃうけどまあ普通は
where a1 = b1 and a2 = b2 and ...
しかないな >>694
文字列にして連結して比較する作戦はどうかな? >>694
それNULL=NULLをどうするのかで問題がでる
NULLの項目があってそれをまじめに考えたら
結構長ったらしくはなる SQL Serverです。
商品No 価格1 価格2 価格調整コード 調整価格
10000 1,000 1,100 001 200
10000 1,000 1,100 002 100
10000 1,000 1,100 003 100
12000 600 700 001 50
13000 800 850 001 100
13000 800 850 003 50
価格調整コードが'001'か'002'の場合は、
調整価格を価格1に加算し、
価格調整コードが'003'の場合は、
調整価格を価格2に加算する。
その結果を、商品Noから一意で取り出せるビューにしたい。
※イメージ
商品No 価格1(調整後) 価格2 (調整後)
10000 1,300 1,200
12000 650 700
13000 900 900
これをSQLだけで作ろうとしているのですが、無理でしょうか。 case when 価格調整コード = '001'などを入れて、
下記のようにしてみました。
商品No 価格1 価格2 価格調整コード 調整価格 001価格 002価格 003価格
10000 1,000 1,100 001 200 200 NULL NULL
10000 1,000 1,100 002 100 NULL 100 NULL
10000 1,000 1,100 003 100 NULL NULL 100
12000 600 700 001 50 50 NULL NULL
13000 800 850 001 100 100 NULL NULL
13000 800 850 003 50 NULL NULL 50
これを、001価格〜003価格のNULLの部分を統合して、
1行で表示できるイメージでもよいです。
※イメージ
商品No 価格1 価格2 価格調整コード 調整価格 001価格 002価格 003価格
10000 1,000 1,100 001 200 200 100 100
12000 600 700 001 50 50 NULL NULL
13000 800 850 001 100 100 NULL 50
プログラムができないため、SQL Management Studioで
SQLだけうって表示できればと思っています。 >>697
>商品Noから一意で
それ、元価格が複数あったりしたらどうするんだよ
とりあえずそのデータでなら
select distinct
商品No,
価格1 + (select ISNULL(SUM(調整価格),0) from テーブル where 商品No=t.商品No and 価格調整コード in ('001','002')) as [価格1(調整後)],
価格2 + (select ISNULL(SUM(調整価格),0) from テーブル where 商品No=t.商品No and 価格調整コード in ('003') ) as [価格2(調整後)]
from テーブル t
で行けるんじゃね >>695
セパレータつけないと
'abc', 'de' と 'ab', 'cde' が一致しちゃう
絶対に値に含まれないセパレータがあるならいいけど >>697
「イメージ」じゃなくて、そのデータの完全な結果を示せ >>697
まだ設計変えられるんだったら、正規化した方がいいかもよ 結合した結果を表示してるのかもしれないし、そこはなんとも。
>>703
意味不明なの? 無理だと思ったらなんだって無理なんだよ
聞くならせめて「可能でしょうか」と聞け > 意味不明なの?
>>703 には
ってことでしょ
>>699 の
> それ、元価格が複数あったりしたらどうするんだよ
を見たら普通正規化しろって思うと思うがまあここ初心者スレだから >> それ、元価格が複数あったりしたらどうするんだよ
>を見たら普通正規化しろって思うと思うがまあここ初心者スレだから
それはクエリの話であって正規化とは全然関係ないな。 >>699
ありがとうございました。これでできました!
元価格はひとつです。
いろいろご意見ありがとうございます。
最近勉強始めたもので、正規化などこれから勉強中です。 >>707
> それはクエリの話であって正規化とは全然関係ないな。
全く理解してないのがよくわかる秀逸なレスだな w 価格1 価格2 というカラム名だけ見て脊髄反射で
「第一正規形じゃない」と思い込んじゃったんだろう。 >>710
商品テーブル: {商品No}, 価格1, 価格2 ({ }はPK)
調整価格テーブル: {商品No, 調整コード}, 調整価格
ってことじゃないの?ってことだろ SQLの神さま!
非正規化テーブルから
正規化テーブル1、正規化テーブル2へ
同時にインサートする時に、
正規化テーブル1、2それぞれに同じ連番を振りたいのですが、
シンプルな方法はありますでしょうか?
ちなみに連番フィールドは、主キーです。 >>712
シンプルな方法を聞く前に、データベース設計の入門書をまず嫁 >>712
RDBMSによると思うので使ってるもの書いてくれ 質問ですが
カラムに
[年齢]、[種別]、[時間]
があったとした場合に [時間] の最新の100件だけを対象に合計、平均を出したいと思っています。
↓ に何を追加したら何を追加したらいいでしょうか?
SELECT SUM(年齢) AS 年齢の合計 , AVG(年齢) AS 年齢の平均 , 種別
FROM 従業員マスタ
GROUP BY 種別 fromを、limitとかoffsetとか使ったサブクエリにすれば良いんじゃね >>718
limit と offsetを使ったら簡単にできそうですね。
まったく知らなかったので助かりました。ありがとうございました。 年齢なんか合計してどうすんだ?年齢層を知りたいなら平均で判りそうなもんだが 対抗戦のチームで年齢合計を条件にすることありそうなw SQL serverはマイクロソフトのデータベースだよね?
ただSQLっていったら何になるのでしょうか?? >>725
リレーショナルデータベース製品のことを言っているなら、SQL Serverを「SQL」と呼ぶ人間もいるし、MySQLのことをただ「SQL」と呼ぶ人間もいる。
どちらの略し方もお勧めしない。 製品名が「SQL」が入ってるんだからどちらも自然な略し方じゃないか
他人の略し方をとやかく言うな すごい混乱するんだよね
ちゃんとまだ理解してないから
SQLserverからSQL文でデータを抽出するって自分は思ってるけど違う
またはSQLserverからMysqlを使ってデータを取得する、とか
混乱のポイントはSQLserverをデータベースじゃなくてMysql とかPostgresqlと並列で捉えて話している人とコミニュケーション取っていること
途中で頭混乱して何がなんだかわからなくなる
まとめると
SQLserverやOracleはデータベース名
ゆえにプログラミング言語じゃない、でいいかな? SQLserverからSQL文でデータを抽出するって自分は思ってるけど違う?
疑問形でした >>730
ORACLEはデータベースで、という意味であえてSQLserverと並べたんだけど どなたかすっきりと正しい定義を書いてもらえないでしょうか?
検索してもそれぞれ少しずつ違い混乱してる… >SQLserverからMysqlを使ってデータを取得する、とか
何言ってんだ? 「sql server」
SQLを理解するインタープリターサービスを提供するサーバー型アプリケーションの総称
「SQL Server」
Microsoft社が製造・販売を行なうRDBMS製品 >>737
はぁ?
SQLserverからsqlを使ってデータを取得する
だったら判るよ
MySQLはまた別個のRDBだろ?お前馬鹿? >>735
じゃあデータベース自体は他にあると思っていいの? 煽るだけでスマートな答え方しない人は説明できないんでしよ? >>740
「データベース」ってのはただのデータの集合を示す概念 じゃあ
RDBMSという括りの中に並列して
SQLserverもMySQLもpostgresqlもあると思っていいんでしょ? >>740
データベースとは読んで字のごとくデータの事でありソフトウェアはあくまでもデータベースを利用・管理するためのものだけど?
「テキストファイルで作文書く」って変だろ? >>742
わかった
データベース自体はなんとかってメーカー名とかはつかないってこと? >>745
わかった
ありがと
全部それぞれ親戚だけど少しずつ違う言語と思えばいい? うちの会社はデータベースに独自の名前つけてるからそれがメーカー名製品名なのかと思ってたんだ
でもその大元がoracleでそれを企業用カスタマイズしてて、だからoracleがデータベースというのかと思ってた
それと同じにms SQLserverも考えてた そのレベルの話ならここで質問するよりWikipediaとかで調べた方が
嫌な気分にならなくてお互いハッピーだと思うぞ。 >>747
ごちゃごちゃ考える前になんで入門書の一つも読もうと思わんの? そう思ってとりあえず本も買ったんだけど、そもそものところに帰ってきた
wikiも読んだ
けど会社で説明受けてまた混乱してきて
たぶんいろいろ略してる人で
ちょっと余談だけど、どうもソートを抽出の意味で使ってくるんだよ
Excelでもオートフィルタでデータ絞る時にソートして、って言ってくる
はーっ???となる
ソートは並べ替えだろ?
もう説明がめちゃくちゃで脳内変換しながらですげー疲れる ちょっと不安になってきたんだけど
どう考えたって
ソート=並べ替え
でオートフィルタで絞ることじゃないよな?
もう当たり前過ぎて聞いてて馬鹿馬鹿しくなるんだけど、その人に仕事教わった人はみんなフィルタ機能をソートするって言うんだよ
自分ひとり、はっ??となって
あまり続くと自信なくなってくる >>746
データベース(データの集合)を扱うためのソフトウェアがDBMS。これがOracleとかSQL server。 まぁ用語の使い方がデタラメな連中が多くて混乱するってのは同情するけどさw >>747
それぞれのDBMSで使うSQLはSQL標準に準拠してはいるんだけど、DBMSによって多少方言はある 脳内変換してるんだけど、いつか変換しなくてよかったのにー的間違いしそうで疲労がすごい >>756
おけ
ここらへんになれば確かに買った本に書いてある通りだ
これ買った
https://www.amazon.co.jp/SQL-第2版-ゼロからはじめるデータベース操作-プログラミング学習シリーズ-ミック/dp/4798144452 は?と思ったそのときにどういう意味か確認すりゃいいのに。
一応プログラミングじゃソート=並べ替えが普通だけど、一般には分類、選別っていう意味もあるからな。 >>760
んーできてたらするんだけどさ
できない空気なわけで…
そう広義では近しいから突っ込みにくい
けど明らかに絞りなんだよな…
はぁーどっかでしれっと質問するわ お願いあるんだけど、質問する時は、出来るだけアゲて欲しい
そうするとID表示されるので、質問者のレスを追いかけやすい
誰が質問し誰が回答しているか分からなくなるとちょっと困る いつだってアゲアゲでいいじゃんか
むしろなんのためにわざわざさげんだよカス 日本マイクロソフトの人間もSQL ServerをSQLと略すやつがいるんだよな。
SQLのことはクエリやコマンドと呼ぶから混乱しないw MSSQLかSQL Serverなら混乱しないよね >>767
あーなら単にsqlならせめてsql文とかそういうこと? 上で質問連打してたやつ
誰も決め手を書いてあげないからなかなか納得いかなかったようだが
SQL=言語と言ってあげればいいじゃん
それが日本語なのか英語なのかフランス語なのかそういう違いだって
日本語で卵ちょうだいっていうのと英語で卵ちょうだいは言葉が違うでしょ?って >>769
いやだからSQLはSQL Serverの略だってば >>770
だからお主はそのつもりでも
そうじゃないやつがいるから混乱すんだべ
クエリをsqlっていう奴がいるから お題
「どなたかSQLを共有してくれますか?」
というメールが流れた
これはなんぞ? >>768
単にSQLなら問い合わせ言語のことだなぁ
あえて明示的に区別したいならSQL文だろうけど
データベースを集積されたデータとそれを操作するアプリケーションとで区別したいなら後者をDBMSと言うべきだけど前者は普通にデータベースって言うでしょみたいな >>771
知るか他人のことなんかw
混乱してるなら混乱したままの現状を理解しろよw >>777
だからわかんない中で意味を汲み取れよー
なんだろ?w >>778
混乱してる事と元々意味が通らない事では天と地ほどのひらきがあるぞw
そうゆーとこ区別しようなw ■ このスレッドは過去ログ倉庫に格納されています