- 締切済み
SQLServerでの書き方
二つのテーブルをマージした後に、時間毎の平均値を取得したいのですが SQLServerではどのように書けばよろしいでしょうか? oracleだと↓こんな感じ select ti , avg(va) from ( select date as ti, value as va from test_table union all select date as ti, value as va from test1_table ) group by ti マージしたいテーブルを取得するSQL文をいじらずに実行できる方法を探しています。 以上、宜しくお願いします。
- hidesbizar
- お礼率46% (7/15)
- SQL Server
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- pkh4989
- ベストアンサー率62% (162/260)
こんにちは。 こんな感じで、如何でしょうか。 select T1.ti , avg(T1.va) from ( select date as ti, value as va from test_table union all select date as ti, value as va from test1_table ) T1 group by T1.ti
関連するQ&A
- SQLServerでのロックについて
SQLServerであるテーブルを行ロックしています。 (select * from テーブルA with (UPDLOCK) where KEYCD = 1) 行ロック実行時に、他のマシンが既にロックしていた場合、それをエラーとして返す方法はありますでしょうか? (Oracleでいう"nowait"のようなもの) 最近SQLServerをやりはじめたばかりの超初心者です。 よろしくお願いします(T_T)
- ベストアンサー
- SQL Server
- SQL文の実行速度について
こんにちは。SQLを勉強しています。 質問をさせてください。 Oracleテーブル(test_table:レコード数はかなりあると考えて構いません) にnumber(int),value(varchar), code(varchar)の3つのフィールドが存在 するとします。 今、codeを指定してvalueを取得したいと考えています。 (1)---------------------------- select value from test_table where code='001'; select value from test_table where code='002'; select value from test_table where code='003'; (2)---------------------------- select code, value from test_table where code='001' or code='002' or code='003' (1)と(2)ではどちらが実行速度が速いのでしょうか? 実際に実行すればわかることですが、そういった環境が ないので、確認できません。宜しくお願い致します。
- 締切済み
- その他(データベース)
- SQLServer2008のDate型について
SQLServer2008のDate型についてお聞きします Date型には日付のみセットされると思うのですが VB2010から接続表示すると時刻データまで表示されてしまいます テーブルデータの表示では「20120305」 VBでは「20120305 0:00:00」 となっております。 期待する動作はVBで「20120305」と表示されることです 接続はこの様にしております。 Dim cn As New SqlConnection(ConnectionString~) Dim cmd As New SqlCommand("SELECT * FROM Test1", cn) cn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader While dr.Read() Trace.WriteLine(dr("Date").ToString) End While なぜ時刻までセットされてしまうのか理解できません。 ご指導よろしくお願い致します。
- ベストアンサー
- Visual Basic
- SQLServerでの副問合せについて
いつもお世話になります。 当方SQLServerをあまり使った事がなくSQLの組み方で少々てこずっております。そこでちょっとお知恵をお借りしたく質問致しました。 処理内容としましては、ある条件でテーブル内のデータを削除するって事なんですが、オラクルで記述するなら DELETE FROM AAAA WHERE (あああ,いいい) IN (SELECT あああ,いいい FROM BBBB GROUP BY あああ,いいい) となるのですが、この構文をSQLServerで記述すると構文エラーとなってしまいます。 まあこの構文が実際には使えて私の記述がおかしいだけのかもしれないのですが、もし使えないのであればどのように記述すればよいのでしょうか? 申し訳ありませんが、宜しくお願いします。 ちなみにSQLServerは2000を使用しております。
- ベストアンサー
- SQL Server
- SQLServerのPIVOT絡みの処理
お世話になります。 従来はVB6のプログラム中で、従来ACCESSMDBからデータを取得していました。 これをDBを変更し、データ自体はOracle、接続先はSQLServer(2005)との仕組みに変更することとなりました。 (SQLServerのリンクサーバ機能にてOracleからデータを取得する) ここで、元のアクセスにて行っていたクロス集計を移行するため 次のようなSQL文(メイン部位以外は端折ってます)を書いたのですが、 「オペランドのデータ型 nvarchar は sum 演算子では無効です」 との警告が出てしまいます。 (”SUM(oraData.suuryou)” を、”Count(oraData.suuryou)”とした場合はデータ取得できました。) 原因、及び回避策についてお知恵を拝借できませんでしょうか? (PIVOT相当の処理をプログラム側で行うことで回避できますが、できればSQLで終えてしまいたいです) SELECT pvt.moji ,pvt.moji2 ,SUM([01]), SUM([02]), SUM([03]), SUM([04]), SUM([05]), SUM([06]), SUM([07]), SUM([08]), SUM([09]), SUM([10]) ,SUM([11]), SUM([12]), SUM([13]), SUM([14]), SUM([15]), SUM([16]), SUM([17]), SUM([18]), SUM([19]), SUM([20]) ,SUM([21]), SUM([22]), SUM([23]), SUM([24]), SUM([25]), SUM([26]), SUM([27]), SUM([28]), SUM([29]), SUM([30]) ,SUM([31]) From openquery (LinkServerName, ' SELECT moji ,moji2 ,hiduke ,TO_CHAR(hiduke, ''dd'') AS dd ,hiduke ,suuryou ,Sum(suuryou) AS suuryou FROM table WHERE hiduke BETWEEN TO_DATE(''2008/04/01'', ''YYYY/MM/DD'') AND TO_DATE(''2008/04/30'', ''YYYY/MM/DD'') UNION SELECT moji ,moji2 ,hiduke ,TO_CHAR(hiduke, ''dd'') AS dd ,hiduke ,suuryou ,Sum(suuryou) AS suuryou FROM table WHERE hiduke BETWEEN TO_DATE(''2008/04/01'', ''YYYY/MM/DD'') AND TO_DATE(''2008/04/30'', ''YYYY/MM/DD'') ') AS oraData PIVOT ( SUM(oraData.suuryou) FOR oraData.dd IN ( [01], [02], [03], [04], [05], [06], [07], [08], [09], [10] ,[11], [12], [13], [14], [15], [16], [17], [18], [19], [20] ,[21], [22], [23], [24], [25], [26], [27], [28], [29], [30] ,[31] ) ) AS pvt WHERE moji = "xxx" OR moji2 = "yyy"
- ベストアンサー
- SQL Server
- SQLのUNIONを使って…
SQLでUNIONを使ったあるメソッドがあります。 まずは、例を見せます。 SELECT '1' AS ID, '' AS 名前, FROM 情報 UNION SELECT ID, 名前 FROM 情報 ORDER BY ID 二つのテーブルを合体させた後、 IDを昇順に変更します。 しかし、「'1'のID」に限りレコードの最下部に表示したい。 ID順に並べ替えると最小値である'1'は当然、最上部に出ますが、 これを最下部にする事が目的です。 また、UNIONの上下にあるSELECT文を 互いに入れ替える等は禁止となっています。 環境は、オラクル10G。 CSEを使ってテストしています。
- ベストアンサー
- その他(プログラミング・開発)
- SQLServerでtime型への変換
SQLServer2008R2 Expressを始めて使っています。 Microsoft SQL Server Management Studioで接続してビューを作成。 SQLクエリでdatetimeのデータとtime型の引き算をして、時間の計算結果を返してもらおうとしています。 テーブル名 test_table col1 = datetime型 col2 = time型 SELECT (CAST(col1 AS time(7)) - col2) FROM test_table; 正しいか正しくないかはまだちょっとわからないのですが、上のようなSQLを実行したいのです。 しかし、 SELECT CAST('2011-01-01 01:00:00' AS time(7)) AS test; というテストを行う段階で「timeメソッドを呼び出せません」とエラーが返ってきます。 書いてるものが違うのか、何か設定そのものが違うのでしょうか。 以下を参考にしました。 http://msdn.microsoft.com/ja-jp/library/bb677243.aspx 凄い初歩的な問題の気がするのですが、何処を調べればいいのかだけでも結構ですので、何かアドバイスがいただきたいです。。 よろしくお願いいたします。
- 締切済み
- SQL Server
- UNION ALLしたテーブルを個別に並べ変え
table1、table2、table3というテーブルがあり このそれぞれをidというカラムで並び替えたものを結合するので考えました。 SELECT * FROM `table1` UNION ALL SELECT * FROM `table2` UNION ALL SELECT * FROM `table3` ORDER BY `id` にすると全てを結合したものを並び替えるので SELECT *, '1' AS tbl FROM `table1` UNION ALL SELECT *, '2' AS tbl FROM `table2` UNION ALL SELECT *, '3' AS tbl FROM `table3` ORDER BY `tbl`,`id` という風に書いてみました、結果としてはよさそうですが 方法としては間違ってないでしょうか? 他にいい方法があればアドバイスをお願いします。
- 締切済み
- MySQL
- オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
サブクエリーで複数キーを指定したいです。例えば以下のようなSQLですが、 SQL> > select * from テーブルA > where (key1,key2) in (select key1,key2 from テーブルB) このSQLはオラクルでは実行できますが、SQLSERVERでは文法エラーになってしまいます。SQL SERVER ではサブクエリーで複数キーを指定するのは不可能なのでしょうか?
- ベストアンサー
- SQL Server
- SQLServer2000のselect文で
SQLServer2000のselect文で select count(*) from Table を実行するのに30秒以上かかってしまいます。 データ数は100万件もありません。 全件数を取得するのになぜこんなにかかってしまうのでしょうか? 主キーはVarcharの50バイトです。 こんな単純な文でこれだけかかってしまうのは、 DBの設定が悪いのでしょうか? それともPCの性能が悪いのでしょうか?
- ベストアンサー
- SQL Server
お礼
ありがとう御座います。 まさに求めていた値が取得できました。 oracleしか触れた事が無いためまだまだ 勉強不足でした・・・。 勉強します。