• 締切済み

アクセス SQLでの型変換

エクセルで出勤予定の表を入力してます。 表 f1|f2|f3|f4・・・・|f19|f20 日付|曜日|◎|✖・・・・|合計数値(◎の合計)|✖の合計 それをアクセスにリンクでデータを取得して そこからユニオンクエリにて結合してるのですが 現在はf3~f18は人の名前が入ってまして、f19以降は集計欄としてますが 人が増えた場合は横にデータを伸ばしてるので、f19も人名に変わる可能性があります なので、f22ぐらいまで結合しておきたいのです。←この時点で発想が怪しい気はしてます。 とりあえず、現状のf19以降は抽出条件ではじけると思ってるので(?)f19以降の数値型をテキスト型にしておけばいいかなと思ってやってみたらうまくいきません *NULL文字の使い方が正しくないといわれます。 SQL select f1,f2,"f3" as name ,f3 from [2017年] where f3 in('◎','△','保') UNION・・・・省略 union select f1,f2,"f19" as name ,cstr(f19) from [2017年] where cstr(f19) in('◎','△','保') 最後の行を打たなければ正常に結合できるのですが・・・・ 解決方法を教えていただきたく、よろしくお願いいたします。

みんなの回答

回答No.1

> *NULL文字の使い方が正しくないといわれます。 f19 の集計にNullがあるのなら、Nz関数でNullを空文字("")に変換する必用があります。 cstr(Nz(f19,"")) あるいは、下記でもNullは空文字に変換できます。 f19 & "" 余談ですが、ユニオンクエリは、 union all select ・・・・ と all を付けておかないと、重複データ排除処理が入りますので重くなります。 重複排除が必用ならしかたないですが。

yon3yon3
質問者

お礼

非常に遅くなりましたが、ありがとうございました。 ブログと併せて、お世話になりまくってます。

関連するQ&A

  • unionでマージした副問合せを結合

    2つの表をunionでマージした結果を副問合せで使用し、この副問合せを他の表とwhereで結合するとORA-00918: 列の定義が未確定です。がでます。こんな感じです。 副問合せそのものは単独で実行してもエラーにならないので結合に問題があるようです。 どなたか回答お願いします。行き詰っています。 select as.xx1,asxx2 from (select * from aa union select * from bb) as, af where as.xx1=af.xx1;

  • 並び替えた後の表の結合

    並び替えた後の表を結合したいと思っています。 UNIONを使うと、結合後でソートしてしまうので、これを回避したいです。 1つ目のSQL  SELECT ID, NAME FROM A_TABLE WHERE F1 = '10' ORDER BY F2,F3 2つ目のSQL  SELECT ID, NAME FROM A_TABLE WHERE F1 = '5' ORDER BY F3,F4 上記の2つの結果を1つにまとめて取得したいのです。 取得順は、1つめのSQLでF2,F3で並び替えられたデータの後、 2つめのSQLでF3,F4で並び替えられたデータにしたいです。 どうか良い方法を教えてください。

  • Access2007でSQLの複数列副問い合わせについて

    VB2005+Access2007を使用しております SQL文の複数列副問い合わせについて教えて下さい 検索をしても他のデータベースのものばかりヒットし、解決できません SELECT * FROM Uriage WHERE (Date, DateID) = (SELECT Date, DateID FROM Uriage WHERE NAME = 'cup') これを実行すると 「メイン クエリの FROM 句の予約語 EXISTS を使用しないフィールド を複数返すサブクエリを作成しました。サブクエリのSELECT ステート メントを変更し、1 つのフィールドだけを指定してください。」 というエラーがでてしまいます。 形をかえ、 SELECT * FROM Uriage WHERE Date = (SELECT Date FROM UriageList WHERE NAME = 'cup') AND DateID =(SELECT DateID FROM UriageList WHERE NAME = 'cup') これを実行すると、 「このサブクエリでは 1 つのレコードしか返せません。」 というエラーがでてしまいます。 また、 SELECT * FROM Uriage WHERE (Date) IN (SELECT Date FROM UriageList WHERE NAME = 'cup') AND (DateID) IN (SELECT DateID FROM UriageList WHERE NAME = 'cup') を実行したところ、 エラーはでないものの、抽出結果が異なるものが出てきてしまいました。 これを解決するにはどのようにしたらよいのでしょうか? よろしくお願いいたします。 なお、某知恵袋にも同様の質問をしてしまいましたが、 回答者様への回答や追加質問が出来ず、 こちらに再質問させて頂きました。申し訳ございません。

  • ACCESSのSQLの書き方

    ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)

  • シンプルなSQLの書き方がわかりません。

    以下のSQLをシンプルに一つにしたいのですが、どのように書いたらよろしいでしょうか? どうぞご返答頂けますようお願い申し上げます。 --test1_tblの抽出 select a1 as a1, b1 as b1 from a_tbl where c=1 --test2_tblの抽出 select a1 as a1, e1 as e1 from b_tbl where rowid in (select min(rowid) from ee group by a1) and a1 is not null and a1 !=' ' order by a1 --test1_tblとtest2tblの結合 select t0.a1 as a1, t0.b1 as b1, t1.e1 as e1 FROM test1_tbl t0, test2_tbl t1 WHERE (t0.a1 = t1.a1)

  • SQL文でエラーが出ます。

    MySQLの事で質問です。 テーブル1~4を結合してフィールド「comment」を検索 する時にフィールド「postDate」の降順でソートしたい のですがエラーが出ました。 「SQLコマンド」 select text from table1 union all select comment from table2 union all select comment from table3 union all select comment from table4 where match(commentIndex) against("検索ワード" in boolean mode) order by postDate desc; 試しに union all select comment from table2 union all select comment from table3 union all select comment from table4 の部分を削除して実行してみた所、成功しました。 後、order by postDate desc;のみ削除した場合でも成功しました。 エラーの内容はこれです↓↓ Unknown column 'postDate' in 'order clause' フィールド「postDate」は存在します。 (varchar型何ですが、それがいけないと思い date型やdatetime型と変えてみましたがダメでした) 何とかソートしたいのですがどうすればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • SQLについて

    こんにちは、honiyonです。  良い質問タイトルが思いつきませんでした...(^^;  2つのテーブルがあります。(仮定です)   ・オーナーの情報テーブル(owner)   ・オーナーの車の情報テーブル(car)  この2つのテーブルを利用して「男性の人で、黒い車に乗ってる人の車種名」を検索しようとしました。  これを1つのSQLで   SELECT car.name FROM owner,car WHERE (owner.no=car.ownerno) and (car.color='black') and (owner.sex='MAN');  とか、   SELECT car.name FROM (SELECT * FROM owner WHERE (owner.sex='MAN')) AS O2, (SELECT * FROM car WHERE (car.color='black')) AS C2 WHERE (owner.no=car.ownerno);  とかやってみましたが、涙が出るほど遅いです。  しかし   SELECT * INTO TABLE owner_tmp FROM (SELECT * FROM owner WHERE owner.sex='MAN'); SELECT * INTO TABLE car_tmp FROM (SELECT * FROM car WHERE car.color='black'); SELECT car_tmp.name FROM (owner_tmp.no=car_tmp.ownerno);  とすると超高速です。  なんとかテンポラリを作らず、出来れば1つのSQL文で高速に冒頭の処理を行いたいのですが、良い方法はないでしょうか。 是非お知恵を貸してください。  宜しくお願いします(.. #データベースはPostgreSQL 7.2.3です。

  • DB2で UNION ALL と GROUP BY の合わせ技のSQLの作り方

    DB2で下記SQLにグループ化して 合計やカウント数を出したいのですが、 うまくいきません --------------------------------------- SELECT A.NYU1 AS NYU ,0 AS SYU ,A.KEN1 AS KEN ,A.CODE1 AS CD From A ) UNION ALL ( SELECT 0 AS NYU ,B.SYU2 AS SYU ,B.KEN2 AS KEN ,B.CODE2 AS CD From B ) ORDER BY CD --------------------------------------- MS-ACCESSなら以下のような感じでうまくいくのですが。。。 SELECT SUM(NYU) AS A ,COUNT(SYU) AS B FROM ( SELECT F1 ,F2 FROM A UNION ALL SELECT G1,G2 FROM B ) GROUP BY NYU ご教授お願いします

  • SQL文 合計と、特定の値を取り出す

    テーブル名:料金表 ID  項目CD  金額 ------------------------- 1   101   1000 1   102   2000  1   103    100 2   101   1000 2   102   2000 2   103    50 3   101   1000 3   102   2000 上記のテーブルがあります IDと、金額の合計と、項目CDが103のものだけ金額をだしたいのです 理想SELECT結果 ID  合計  項目CD:103 ------------------------- 1   3100   100 2   3050    50 3   3000    0(もしくはnull)  select ID,sum(金額) as 合計 from 料金表 where ID in(1,2,3) group by ID,金額 でIDと合計までは出せました 特定の項目の値を取り出すのはどうしたらいいでしょうか?

  • ACCESSのVBAのSQLを教えてください。

    テーブル1とテーブル2があり、それをUNIONで結合して、リンクさせたOracleのテーブルキーと 結合し、Oracleのテーブルにないキーを検索したいのですが、うまく出来ません。 ACCESSのVBAで作りたいのですが・・どうかご教授願います。 構成  テーブル1   項目名  Key 顧客コード1   名前 テーブル2     項目名   Key 顧客コード1   Key 顧客コード2      名前 Oracleのテーブル  テーブルB     項目名  Key 管理コード  テーブル1の顧客コード1とテーブル2の顧客コード2をUNIONでまとめたものをA1としA1.顧客コードとします それとOracleのテーブルであるテーブルBの管理コードと結合して テーブルBにないA1の顧客コードを抽出するSQL文を作成したいと思います。 (管理コード,顧客コード1,顧客コード2は同じ属性、同じ桁数) SELECT A1.管理コード FROM ( SELECT T1.顧客コード1 as 顧客コード FROM テーブル1 T1 UNION SELECT T2.顧客コード2 as 顧客コード FROM テーブル2 T2 )A1, テーブルB WHERE A1.顧客コード = テーブルB.管理コード AND テーブルB.管理コード IS NULL; エラーにはなりませんが、実行結果は、管理コード 0件です。データ的には、テーブルB側にはテーブル1にはあるがテーブルB側にないデータはあります。