- ベストアンサー
SQLで式で作った項目を別の式で再利用
SQLで式で作った項目を別の式で再利用する記述が社内のAccessの中にありました。 SELECT TB1.Item1 , (TB1.Item2 * 2) as Item2x , (TB1.Item3 * 3) as Item3x , (Item2x + Item3x) as Item4 FROM TB1 ; ※実際はもっと複雑ですが Sqlserverで同じ事をするとエラーになります。 SELECT TB1.Item1 , (TB1.Item2 * 2) as Item2x , (TB1.Item3 * 3) as Item3x , ((TB1.Item2 * 2) + (TB1.Item3 * 3)) as Item4 FROM TB1 ; 何のことは無く、式をその場でもう一回書けばいいだけの話ですが、釈然としないというか、なんでそんな事すらできないのか、できない方が多分正しいのだと思うけど、なんかいい方法ありませんか?
- webuser
- お礼率85% (1391/1635)
- SQL Server
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
WITHを使った方がすっきりするかも。 ---- WITH TB AS ( SELECT TB1.Item1, (TB1.Item2 * 2) AS Item2x, (TB1.Item3 * 3) AS Item3x FROM TB1 ) SELECT Item1, Item2x, Item3x, (Item2x + Item3x) AS Item4 FROM TB; ----
その他の回答 (2)
- dell_OK
- ベストアンサー率13% (740/5642)
そうですね。 私は間違えたり修正が大変になるので同じ式を何度も書きたくない時はこんな風にしています。 ---- SELECT Item1, Item2x, Item3x, (Item2x + Item3x) AS Item4 FROM ( SELECT TB1.Item1, (TB1.Item2 * 2) AS Item2x, (TB1.Item3 * 3) AS Item3x FROM TB1 ) AS TB; ----
お礼
補足
単純で単発であればコレでやります SELECT TB1.Item1 , (TB1.Item2 * 2) as Item2x , (TB1.Item3 * 3) as Item3x , ((TB1.Item2 * 2) + (TB1.Item3 * 3)) as Item4 FROM TB1 ; 複雑で単発であればコレでやります SELECT Item1, Item2x, Item3x, (Item2x + Item3x) AS Item4 FROM ( SELECT TB1.Item1, (TB1.Item2 * 2) AS Item2x, (TB1.Item3 * 3) AS Item3x FROM TB1 ) AS TB; もっと複雑であったり、再登場の可能性があれば、一旦、Viewを作ります。 でも、Accessみたいにその場で使えたら便利だな、なんかもっといい方法ないのかな、なんて思ったので質問してみました。
関連するQ&A
- PL/SQLのCREATE文でCHAR型で項目ができない
PL/SQLで以下のようにCREATE文を発行しました。 Bテーブルの項目 項目1,'1'を持つテーブルを作成したいのです。 DECLARE KBN CHAR(1); WK_SQL VARCHAR2(4000); BEGIN KBN := '1'; WK_SQL := 'CREATE TABLE A_TBL AS SELECT B.項目1 , ' || KBN || ' AS A項目 FROM B_TBL B ' ; EXECUTE IMMEDIATE WK_SQL; END; 結果はA_TBLの項目、A項目がどうしてもNUMBER型になるのです。初心者で、質問に不備なところもあるかもしれませんが、どうすればよいか、ご教授ください。
- ベストアンサー
- Oracle
- FROM SQL文 がしたい
いつもお世話になってます。 SQL分の 「SQL1」 「SQL2」 を予めstring変数に入れておいて、 SELECT SQL1.項目x, SQL2.項目y FROM SQL1,SQL2 WHERE SQL1.項目z = SQL2.項目z ということがしたいのですが、そんなことできますか? アクセスのクエリではできたのですが。
- ベストアンサー
- Visual Basic
- 年齢分布テーブルの再集計SQL
テーブルA 年齢,人数 20,15 21,11 22,26 .... 30,5 31,88 ... 60,5 上記テーブルAからのSQLで下記のデータが欲しいと思っております。 【欲しい結果】 年齢範囲,人数 20~24,50 25~29,33 30~34,199 ... ただし、 select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1 union select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2 union select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3 ... というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです) また結果が 項目名:20~24,25~29,30~34,... レコード:50,33,199,... というのも遠慮したいです。 CASE文やsum、groupを使えば、できそうな気がするのですが、、、 ご教授お願い致します。
- ベストアンサー
- SQL Server
- SQL文 について教えて下さい
「Access」で下記のように記述するものを「SQL Server」に置き換えた場合、 どのように記述する事になるのでしょうか。 SELECT Max(CLng(mid(TestId,4,10))) AS MAX_pti_patient_id FROM patient_info WHERE TestCd1 = 1 and TestFlg = 1 どなたか分かる方がいましたら教えて下さい。 よろしくお願い致します。
- ベストアンサー
- SQL Server
- sqlのusingについて
SQL92標準の select * from a left outer join b using(column) の様にusingはsqlserverでは使用できないのでしょうか? on a.column = b.columnは出来ますが。。。 書き方が悪いのか、sqlserverはSQL92標準ではないのか、そもそもusingはSQL92標準ではないのか。色々webで調べてましたが、わかりませんでした。どなたか教えて下さい。
- 締切済み
- SQL Server
- SQL、2つのSQLを1つで表現するには?
<<<<クエリ8>>>> SELECT book.author, book.bookname, book.money*daityou.cnt AS 式1 FROM book, daityou WHERE (((book.bookname)=[daityou].[bookname])); <<<<クエリ9>>>> SELECT クエリ8.author,sum(Expr1002) from クエリ8 group by author; として、ひとつのSQL文にするにはどうすればいいですか? よろしくお願いします。
- ベストアンサー
- その他(データベース)
- SQL文の書き方
お世話になっております。 現在、SQLServer2000(SP4)を使用しています。 次の結果を求めるSQL文を作りたいのですが、中々上手く行きません。 良い方法を教えて下さい。 あるテーブル(tableA)にレコードが以下のようにあるとします。 【基本コード】【大分類】【中分類】 1 1 3 1 1 4 1 2 1 2 1 99 2 18 1 3 3 2 やりたい事は、【基本コード】毎に、【大分類】【中分類】の最小値を取得したいので、下記の結果を得たいのですが、 期待する結果↓ 【基本コード】【大分類】【中分類】 1 1 3 2 1 99 3 3 2 現在考えているSQL文では、下記のようになってしまいます。 実際の結果↓ 【基本コード】【大分類】【中分類】 1 1 3 2 1 3 3 3 3 現在考えているSQL文↓ SELECT 基本コード, MIN(大分類) AS 大分類, (SELECT MIN(中分類) FROM tableA WHERE 大分類 = (SELECT MIN(大分類) FROM tableA) GROUP BY 大分類) AS 中分類 FROM tableA GROUP BY 基本コード 中分類を求める場合の、大分類の指定の仕方が悪いのはわかるのですが、どう直したら良いのか分からず困っています。 宜しくお願いします。
- ベストアンサー
- SQL Server
- SQLファイルでのパラメータ指定の方法
いつもお世話になっております。 以下のようなスクリプトを含むSQLファイルで「1234」を何回も記述したくないので、スクリプト上部で1回パラメータ指定する書き方をご教授願います。実行はSQLServerのクエリアナライザで行いたいです。 SELECT * FROM 顧客 WHERE 会社CD=1234; SELECT * FROM 商品 WHERE 会社CD=1234; よろしくお願いします。
- ベストアンサー
- SQL Server
- SQLServer2005のSQL文での別名の取り扱い
現在VB.net2005とSQLServer2005にてプログラムを組んでいます。 以下のように、サブクエリにて抽出されたStockテーブルと Tagテーブルを結合するSQL文を組みました。 *行頭は列番号です。 01- SELECT * FROM 02- ( 03- SELECT A1.*, A3.* FROM 04- ( 05- SELECT A2.* FROM stock AS A2 06- WHERE A2.StockDay < #日付# '【SQLserverで流す時は "CONVERT(DATETIME, '日付')"】 07- AND A2.ShopCode = '店番号' 08- ) AS A1 09- LEFT JOIN tag AS A3 10- ON A1.StockNo = A3.StockNo 11- ) AS S1 これだとACCESS2000のクエリ上では正しく実行できます。 しかし、.net2005のサーバエクスプローラ上で上記SQL文を流しても、 「列 'StockNo' が 'S1' に複数回指定されました。」 とエラーが出てしまい実行することができません。 行03を "SELECT A1.* FROM" にするとSQLServer2005でも動きますが、 tagテーブルのフィールドが結果に含まれません。 tagテーブルのフィールドも結果に含みたいです。 どなたか原因や回避方法をご存知の方いらっしゃいましたら、 お手数ですが是非ともご教示頂きたいです。 よろしくお願い致します。
- ベストアンサー
- SQL Server
- PLSQLで条件によりSQLを動的に変えたい
例えば、あらかじめテーブルなどを読み、その内容により、 SQLの文そのものを非常に変えたいとします。 SQLその1 select * from TABLEA where A = 1 SQLその2 select * from TABLEA where A = 1 and B = 2 and C = 3 and D = 4 上記は例ですが、内容などにより複雑な条件式を追加したい。 ベースのSQLは非常に長い為、 例えば 完全に切り分けるのでは無く、共通の部分は共通ソースとしたい。 また、プリプロセッサみたいに、条件式が追加された場合 あたかも、初めからそのSQLのみがあり、他の制御文などをSQL文自身には追加したくない。 動的SQLでは無い方法でそのような事が可能でしょうか? ----- イメージ ----- select * from TABLEA where A = 1 IF (条件がある時のみ) B = 2 and C = 3 and D = 4 END IF; ------------------- 実際には、SQL文の中にPLSQLの制御文をうまく追加できない。
- ベストアンサー
- Oracle
お礼