• ベストアンサー
  • すぐに回答を!

accessでDISTINCT 句と矛盾

IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数2211
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

テーブルにないフィールド名(c)は使用できません ORDER BY a,IIF(IsNull(b), 0, 1) としてください

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 これで解決いたしました。

関連するQ&A

  • DISTINCTで選択した項目以外でのソート

    お世話になります。 SQLサーバ2000から、SQLサーバ2008への移行を行っております。 以下のようなSQL文は2000では許容されていたようで、問題なく(?)稼働していただのですが2008に移行したら軒並みエラーになってしまいました。 エラーで稼働確認が進まないので、修正方法を検討しているのですが、まだSQLサーバが使えない環境で確認ができません。 2000が来てから確認する予定ではありますが、以下の通りで新旧・同様のソート順になると考えて問題ございませんでしょうか。 教えていただけると幸甚です。 【例1】 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY T1.C1 →ORDER BY 項目を ISNULL(T1.C1,"")に変更 【例2】 SELECT DISTINCT T1.C1,T1.C2 FROM T1 ORDER BY T1.C1,T1.C3 →ORDER BY 項目から T1.C3 を削除する 以上です。宜しくお願いいたします。

  • Distinct使用時に0除算エラーが起こる

    初めて投稿します。よろしくお願いします。 現在、VB6とアクセス97で構築されたシステムのメンテナンスを行なっています。下記SQLの実行時に0で除算しましたのエラーが出ます。 select * from [ SELECT DISTINCT NO FROM 指示書]. AS NOリスト order by iif(NO = "0", 9999999 ,NO) 色々試してみましたが解決方法が見つからないので質問しました。 ちなみに、アクセス内で"SELECT DISTINCT NO FROM 指示書"というクエリを作成し実行しておくとエラーが出ずに正常に動作します。 よろしければ、ご教授よろしくお願いします。

  • 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 " ⇒成功

その他の回答 (1)

  • 回答No.2
noname#22222

次のような [shain] テーブルでチクッとテストしてみました。 [shain] ID  A   B 1   4   1 2   3   1 3   3    4   1   1 5   1   1 Private Sub コマンド0_Click()   Dim I    As Integer   Dim N    As Integer   Dim Datas() As String   Dim strSQL As String   strSQL="select DISTINCT a, b from (SELECT * FROM shain ORDER BY a, not Len(B & '')>0)"    Datas() = DBLookups(strSQL)   N = UBound(Datas())   For I = 0 To N     Debug.Print Datas(I)   Next I End Sub 1,1 3, 3,1 4,1 と、ID=4、5 の重複を外し、かつ、ソートしたいのでしょうか? であれば、一度ソートしてから DISTINCT したらどうでしょうか?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 年月でdistinctしたい(PostgreSQL)

    PostgreSQLでdistinctの使い方についての質問です。 t_mainのDDATEカラム(DATE)に DDATE ============================ 20030929 20030930 20031001 20031002 ・ ・ ・ というデータが入っています。 このデータのうち、年月でdistinctした データが欲しいので、以下のようにSQLを組みました。 =========================================== select distinct substring(DDATE from 1 for 6) from t_main order by DDATE これでは値が取得できなかったので、次に =========================================== select distinct TO_CHAR(DDATE,'YYYYMM') from t_main order by DDATE としましたが、これも値が返ってきません。 上手に年月でdistinctできる方法を教えてください。 欲しいのは ======== 200309 200310 という結果です。 宜しくお願いいたします。

  • SQLのこと:distinctして並び替えたい

    select * from (select distinct on (aaa) * from bbb) as ccc order by ddd テーブルbbbのaaaというフィールドが重複せず、しかも他のフィールドで並び替えをしたかったら、このような書き方以外ありますか?データベースはPostgreSQLです。 この書き方で不都合が出ているというわけではありませんが、どう書けば、パフォーマンス的にも良いSQLになるか、詳しい方がいらっしゃいましたら、お願いします。

  • COUNT(DISTINCT *)がエラーになる理由を教えてください

    以下のSQL文がエラーとなるのはなぜですか? SELECT COUNT(DISTINCT *) FROM 社員 SELECT DISTINCT * FROM 社員 ならエラーにならないのにどうしてでしょうか

  • distinct句を使わずレコード総計を求めたい

    DB初心者です。 DISTINCT句を使わずに、group by句を使って 重複データを除いたレコード総計を求めたいと思い、 下記の用にSQL文を書いたのですがうまくいきません。 oracleではなく、DB2を使っているのですがSQL文として 可能なのか教えていただければと思い質問を致しました。 <例> テーブル名:商品DB 商品名 a a b b c だったら、重複を除いたレコード数は3になりますが、 select count(*) from 商品DB group by 商品名 とすると 2 2 1 となり、それぞれの商品の合計数が出てしまうので select count(*) from ( select 商品名 from 商品DB group by 商品名) と副問合せ(でよいのでしょうか?)をしてみると 入力が予想されるトークンには "AS" が含まれている可能性があります。とエラーになってしまいました。

  • ページングした後、レスポンスが悪くなりました。

    宜しくお願い致します。 全件取得用のSQL文は以下の通りです。 ------------------------------------------------ SELECT ... , isnull(T2.a, 0) AS a , isnull(T2.b, 0) AS b FROM T1 left join T2.... 複雑 WHERE isnull(T1.a, 0) - isnull(T1.b, 0) > 0 ORDER BY T1.item ------------------------------------------------ ページングために、Frameworkが以下のように編集してくらます。 ------------------------------------------------ SELECT TOP 10 * FROM ( SELECT ... , isnull(T2.a, 0) AS a , isnull(T2.b, 0) AS b FROM T1 left join T2....複雑 WHERE isnull(T1.a, 0) - isnull(T1.b, 0) > 0 ) t ORDER BY item ------------------------------------------------ 全件取得するときは、1,2秒で結果が出るのが、ページングすると50秒以上になってしまいます。 とりあえず、T1.aとT1.bがNULLのデータは検索対象外なので、WHERE分を T1.a - T1.b > 0 に修正しました。(1,2秒で結果が出るようになります) 修正はしましたけど、ページング用SQL文がなぜパフォーマンスが落ちたのか理由が説明できないです。 ご存知の方、分析していただけないでしょうか? (参考:5000件のデータのうち20件を抽出しています)

  • DISTINCT + COUNT

    みなさんこんにちは。 以下のようなSQL文のCOUNT関数を作りたいのですが、 うまい手法がわからず困っています。 SELECT DISTINCT Ta.会員ID, Tb.品番 FROM TABLE_A AS Ta LEFT JOIN TABLE_B AS Tb ON Ta.ID = Tb.ID ↑こいつのCOUNTですが、単純に SELECT COUNT(DISTINCT Ta.会員ID, Tb.品番) ~ とやるとエラーになってしまいます。 どうやってやればカウントできるのでしょうか? すごく初歩的なことだと思いますが、 ご助言お願いいたします。

  • Access SQLでnull値のOrderby

    お世話になります、 AccessのSQLについて教えてください。 例えば打率をSQLの中で計算させたとします。その値で Order by して表示させたいのですが、計算結果がnull (打席が0の人)は分母が0になってしまい値が存在しない (null)ですよね、その場合にOrder byを行うとSQLでエラーになってしまいます。 このような場合皆様ならどのように回避されるでしょうか? select B.daritu From (select hit/dasu As daritu From A ) As B Order by B.daritu

  • 「SELECT ~  FROM テーブル名」の後に続く句は「WHERE句」と「ORDER BY句」以外にありますか?

    最近アクセスのSQL文を学びました。 選択クエリのSQL文で 「SELECT ~  FROM テーブル名」 の後に続く句は 「WHERE句」と 「ORDER BY句」以外にありますか? よろしくお願いします。

  • GROUP BY と DISTINCT

    SQLPLUSにおいて、ある表X1(code1,code2)に (A,1),(A,1),(A,2),(A,2),(A,3),(A,3) (B,4),(B,4),(B,5),(B,5),(B,6),(B,6) というデータがあり、別の表X2(data1,data2)に (1,10),(2,20),(3,30),(4,40),(5,50),(6,60) というデータがある場合に(X2の左の要素はprimary) 結果として(A,60),(B,150)というデータを得たいのですが、GROUP BY や DISTINCT を使おうするとエラーになってしまいうまくいきません。 <select code1,sum(data2) from X1,X2 where distinct(X1.code2) = X2.data1 group by code1> みたいな感じでやりたいのですが、(distinctがこの使い方でできないのはわかってます)どうしたらいいでしょうか? ちなみに副問合せを使って先にX1から(A,1),(A,2)...(B,6)をセレクトしようとしてもダメでした。 説明がわかりづらくて申し訳ございませんがどなたか詳しい方のアドバイスをお願い致します

  • Select Distinctについて

    SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?