- ベストアンサー
簡単なSQLを書くには?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
自分だったらPHPなどのスクリプトでSQL文を作成してやると思います。 $sql = "SELECT "; for ($i = 1; $i <= 40; $i++) { $sql .= "SUM(a" . $i . ")"; if ($i != 40) $sql .= ","; } $sql .= ' FROM `table` WHERE b1="0" ORDER BY c1'; $result = mysql_query($sql);
関連するQ&A
- 重複レコードを高速で取得するSQL
Access(mdb)から約2万件レコードのあるテーブルがあるとします。 列数は20ほど。 その中から、3つの列において重複しているレコードを取得したいのですが、 高速に取得する方法はありますでしょうか? (VB.NETで、重複レコードをユーザーに示す処理を作成したいのです) 以下のSQLを試したところ、1分以上時間がかかってしまいました。 ----------------------------- SELECT * FROM テーブルA table1 WHERE EXISTS ( SELECT * FROM テーブルA table2 WHERE table1.列A = table2.列A table1.列B = table2.列B table1.列C = table2.列C GROUP BY table2.列A HAVING COUNT(table2.列A) > 1 ) ----------------------------- アドバイスをお願いします。
- 締切済み
- Visual Basic
- SQL文「DISTINCT」の「ORDER BY」について
SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー "ORDER BY (table.A列) ASC " ⇒成功
- ベストアンサー
- SQL Server
- sqlについて
下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。 どなたかわかる方教えてください。 select b.ym, b.no, isnull(e.sumcnt,0)as val, null as bunsi, null as bunbo from (select distinct ym,no from Table_A)b inner join (select ym from Table_B where cd=1)d on b.ym=d.ym left outer join (select b1.ym,b1.no,sum(c1.cnt)as sumcnt from Table_A b1 inner join (select ym from Table_B where cd=1)d1 on b1.ym=d1.ym inner join Table_C c1 on b1.ym=c1.ym group by b1.ym,b1no)e on b.ym=e.ym and b.no=e.no
- 締切済み
- その他(プログラミング・開発)
- SQL HAVING句の使い方について
以下のテーブルAとテーブルBを結合して結果テーブルを出力したいと考えています。 (テーブルA上のIDのカウントした数をテーブルBに結合して出力したい。) テーブルA ----------- CATE ID aaa 001 bbb 001 ccc 003 ddd 004 テーブルB ----------- ID NAME 001 101 002 102 003 103 004 104 結果テーブル ---------------------- ID NAME COUNT 001 101 2 002 102 0 003 103 1 004 104 1 そこで、 =================================== SELECT B.ID, B.NAME, COUNT(A.ID) FROM TABLE_A B, TABLE_B B GROUP BY B.ID, B.NAME, A.ID HAVING A.ID = B.ID =================================== とSQLを書いてみましたが、 002 102 0 のテーブルAにIDが存在していない列が結果として表示されませんでした。 WHERE句でいう「WHERE A.ID =* B.ID」のようなことを行いたいのですが、どのように行えばよいでしょうか? よろしくお願いいたします。
- ベストアンサー
- Oracle
- SQL初心者です。
【Table1】 Col1 Col2 Aa A Ab A Ba B Bb B Ca C Ca D 【Table2】(Data1は固定) Data1 Data2 Aa A Ab B→A Ba C→B Bb A→B Ca B→C Ca C ※Col1に重複がある場合、重複結果の1行目のレコードをData2に入れる (今回の場合CをData2に入れる) Data1は固定で、Table1を使ってData2を上記の様に修正するSQLが書けなくて困っています。 Col1が重複してない場合の修正するSQLを書いてみましたが(合っているかはわかりませんが...)、 重複する場合のSQLも追加して最終的に1つのSQLで、すべて修正できるようにしたいです。 update Table2 T2 set Data2= (select Col2 from Table1 where Col1= (select Col1 from Table1 T1 where T2.Data1=T1.Col1 group by T1.Col1 having count(T1.Col1)=1 ) ) わかりにくい部分もあると思いますが、ご教授お願いします。
- ベストアンサー
- Oracle
- SQL得意な方
仕事で困っています、 なにとぞお力添えを。 テーブル1から、TOP50 でaとbを表示させたいのです。 で、その際の条件として、 開始するレコードも指定したいのです。 下記SQLの[○]の部分に50が入っていたら、 51~100件を表示する、と、いうような。 SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a で、順調だったのですが、WHERE条件が なんだか怪しいらしく、 a >= ''の時だけはきちんと動くのですが、 ANDでc='1'をつけた所、普通に全件表示されてしまいます。 [ちゃんと51件目から100件目を表示するSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a [何故か全件表示になるSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a ※[何故かNOT IN (~)の部分がまったく働いていない] どうしてなのでしょう?。 解りにくい質問で大変申し訳ないのですが どなたかご教授いただけないでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- SQL 表の結合
SQLで2つの表から条件に合ったデータを取り出し、同じ列に表示させたいのですが、 どうやっても外部結合のようにすることしかできませんでした。 取り出したデータを縦に結合?させることはできるのでしょうか? 例) dataは月の上旬中旬下旬でそれぞれabcとします。 入力値はmonthとdayで、これらからuriageを選択します。 dataの取りうる値はa,b,c,ab,bc,abcとします。 table:A 売上表 table:B 上旬中旬下旬判断 --------------------------- ----------- key | data | month | uriage day | data --------------------------- ----------- 1 | a | 1 | 500 1 | a 2 | ab | 1 | 800 … | … 3 | bc | 1 | 400 10 | a 4 | c | 1 | 100 11 | b 5 | abc | 1 | 900 … | … … | … | … | … 31 | c --------------------------- ----------- month = 1 , day =5のとき table:Bより SELECT data FROM table:B WHERE day = 5 としてdata "a" を得ます。 この"a"と同じdataを持つuriageを表示させたいので SELECT uriage FROM table:A WHERE month = 1 AND data = (SELECT data FROM table:B WHERE day = 5) として table:query1 -------- uriage -------- 500 -------- を得ました。 ここまでは良いのですが、これに付け加えて、 table:Bから取り出したdata "a"をtable:Aのdataが含むとき(data = a,ab,abcのとき) その全てのuriageを表示させたく、 ワイルドカードを使おうと SELECT uriage FROM table:A WHERE month = 1 AND data = %(SELECT data FROM table:B WHERE day = 5)% 等としてみたのですが、上手くいきませんでした。 そこで、別のクエリーを作って SELECT uriage FROM table:A WHERE month = 1 AND data = 'ab' AND data = 'abc' として table:query2 --------- uriage --------- 800 --------- 900 ---------- を得ました。 そして、最後に、 得られた2つの表をまとめて --------- uriage --------- 500 --------- 800 --------- 900 --------- としたいのですが、 SELECT uriage, uriage FROM query1, query2 とすると ------------------ uriage | uriage ------------------ 500 | 800 500 | 900 ------------------ となりますし、UNIONは使い方がよくわからないためシンタックスエラーにしかならず...。 そもそも、縦に結合?はできるのでしょうか??? あれこれ試してみたのですが、詰まってしまったので、 どなたか知恵をお貸しください。
- ベストアンサー
- PostgreSQL
- このSQL文の意味を教えてください。
SQL勉強中の者です。このSQL文の意味を教えてください。 SELECT A.* FROM table AS A, table AS B WHERE A.id *= B.id AND A.flag = 1 tableにAとBという別名をつけて、Aの全ての項目を抽出しているというところまでは分かりました。 分からないのは「WHERE A.id *= B.id」の部分です。ただの「=」なら分かりますが「*=」って何ですか? あと、AとBのテーブルが同じなのですが、同じテーブルを2つ並べている意味がよく分かりません。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- SQLを教えて下さい
SQL文を教えて下さい 以下の2つのテーブルがあります。 TABLE1 --------------- ID,NAME,PRICE --------------- 1,部品A,100 2,部品B,200 3,部品C,300 TABLE2 --------------- ID,NAME,PRICE --------------- 1,部品Aのサブ1,1 1,部品Aのサブ2,2 2,部品Bのサブ1,5 2,部品Bのサブ2,5 --------------- SELECT TABLE1.NAME TABLE2.NAME TABLE1.PRICE TABLE2.PRICE WHERE TABLE1.ID = TABLE2.ID(+) TABLE2.PRICE = (SELECT MAX(?) ?) 期待する結果 ・TABLE1.NAME = 部品Aの場合 --------------- 部品A,部品Aのサブ2,100,2 ・TABLE1.NAME = 部品Bの場合 --------------- 部品B,部品Bのサブ1,200,5 TABLE1.NAME = 部品Cの場合 --------------- 部品C,,300, ・TABLE1のNAMEに、TABLE2のNAMEが関連付く(付かないものもある) ・外部結合とMAX関数を用いたい。 ・TABLE2のPRICEが大きい方を取得(同一の場合は、どちらかを取得)
- ベストアンサー
- Oracle
お礼
やはり、プログラム側で何とかするべきなんですね。 手を抜かずがんばりたいと思います。