2016-10-12 13 views
1

アクセスデータベースでUNIONクエリを実行しています。私はデータ型の不一致のエラープロンプトがあったので、すべての変数をintとして定義しました。これは問題を解決していません。各変数は1または0の値を持ち、ヌルはありません。何か案は?UNIONデータ型の不一致

SELECT 
CInt(qryGB.BM∞) AS [BM∞], 
CInt(qryGB.PM∞) AS [PM∞], 
CInt(qryGB.P∞) AS [P∞], 
CInt(qryGB.[RAG_B<0]) AS [RAG_B<0], 
CInt(qryGB.[RAG_P<0]) AS [RAG_P<0], 
CInt(qryGB.[RAG_C<0]) AS [RAG_C<0], 
CInt(qryGB.[B<0]) AS [B<0], 
CInt(qryGB.[P<0]) AS [P<0], 
CInt(qryGB.[C<0]) AS [C<0], 
CInt(qryGB.[P-1]) AS [P-1], 
CInt(qryGB.[C-1]) AS [C-1], 
CInt(qryGB.P0) AS [P0], 
CInt(qryGB.C0) AS [C0], 
CInt(qryGB.[P+1]) AS [P+1], 
CInt(qryGB.[P+2]) AS [P+2], 
CInt(qryGB.[P+3]) AS [P+3] 
FROM qryGB 

UNION ALL SELECT 
CInt(qryTMD.BM∞) AS [BM∞], 
CInt(qryTMD.PM∞) AS [PM∞], 
CInt(qryTMD.P∞) AS [P∞], 
CInt(qryTMD.[RAG_B<0]) AS [RAG_B<0], 
CInt(qryTMD.[RAG_P<0]) AS [RAG_P<0], 
CInt(qryTMD.[RAG_C<0]) AS [RAG_C<0], 
CInt(qryTMD.[B<0]) AS [B<0], 
CInt(qryTMD.[P<0]) AS [P<0], 
CInt(qryTMD.[C<0]) AS [C<0], 
CInt(qryTMD.[P-1]) AS [P-1], 
CInt(qryTMD.[C-1]) AS [C-1], 
CInt(qryTMD.P0) AS [P0], 
CInt(qryTMD.C0) AS [C0], 
CInt(qryTMD.[P+1]) AS [P+1], 
CInt(qryTMD.[P+2]) AS [P+2], 
CInt(qryTMD.[P+3]) AS [P+3] 
FROM qryTMD; 
+0

2番目のクエリ –

+0

でエイリアスを削除しようとするデータ型の不一致も発生しますか?私は値の1つが数値ではないと予想し、その結果データ型の不一致が生じます。 – Bouke

+0

Nopeは別のクエリとして正常に動作します –

答えて

1

いずれの列にもヌルがないことを確認してください。

アクセスSQLは、nullになるとちょっと変わってきます(標準SQLのヌルが始まるのが奇妙なことに注意してください!)。たとえば、ヌルをデータ型にキャストすることはできません。

SELECT DISTINCT CINT(NULL) AS null_cast_to_int FROM AnyPopulatedTable; 

「無効なヌル使用」のエラー。

だから、すべてのAccess SQLのNULL値は同じタイプであるが、どのタイプ?:

SELECT DISTINCT TYPENAME (NULL) AS type_name FROM AnyPopulatedTable; 

すると、エラーと「null」を返していません!

+0

最後にnullsと関係していました。以前のクエリで面白いタイプのミキシング。 –

0

UNIONの間にCInt()の変換を行うと、問題が発生する可能性があります。 UNIONを実行する前にサブクエリで変換を実行してみます。ような何か:二つの別々のクエリとしてクエリを実行するとき

SELECT 
a.[BM∞], 
a.[PM∞], 
a.[P∞], 
a.[RAG_B<0], 
a.[RAG_P<0], 
a.[RAG_C<0], 
a.[B<0], 
a.[P<0], 
a.[C<0], 
a.[P-1], 
a.[C-1], 
a.[P0], 
a.[C0], 
a.[P+1], 
a.[P+2], 
a.[P+3] 
FROM 
    (SELECT 
    CInt(qryGB.[BM∞]) AS [BM∞], 
    CInt(qryGB.[PM∞]) AS [PM∞], 
    CInt(qryGB.[P∞]) AS [P∞], 
    CInt(qryGB.[RAG_B<0]) AS [RAG_B<0], 
    CInt(qryGB.[RAG_P<0]) AS [RAG_P<0], 
    CInt(qryGB.[RAG_C<0]) AS [RAG_C<0], 
    CInt(qryGB.[B<0]) AS [B<0], 
    CInt(qryGB.[P<0]) AS [P<0], 
    CInt(qryGB.[C<0]) AS [C<0], 
    CInt(qryGB.[P-1]) AS [P-1], 
    CInt(qryGB.[C-1]) AS [C-1], 
    CInt(qryGB.[P0]) AS [P0], 
    CInt(qryGB.[C0]) AS [C0], 
    CInt(qryGB.[P+1]) AS [P+1], 
    CInt(qryGB.[P+2]) AS [P+2], 
    CInt(qryGB.[P+3]) AS [P+3] 
    FROM qryGB) as a 
UNION ALL SELECT 
b.[BM∞], 
b.[PM∞], 
b.[P∞], 
b.[RAG_B<0], 
b.[RAG_P<0], 
b.[RAG_C<0], 
b.[B<0], 
b.[P<0], 
b.[C<0], 
b.[P-1], 
b.[C-1], 
b.[P0], 
b.[C0], 
b.[P+1], 
b.[P+2], 
b.[P+3] 
FROM 
    (SELECT 
    CInt(qryTMD.[BM∞]) AS [BM∞], 
    CInt(qryTMD.[PM∞]) AS [PM∞], 
    CInt(qryTMD.[P∞]) AS [P∞], 
    CInt(qryTMD.[RAG_B<0]) AS [RAG_B<0], 
    CInt(qryTMD.[RAG_P<0]) AS [RAG_P<0], 
    CInt(qryTMD.[RAG_C<0]) AS [RAG_C<0], 
    CInt(qryTMD.[B<0]) AS [B<0], 
    CInt(qryTMD.[P<0]) AS [P<0], 
    CInt(qryTMD.[C<0]) AS [C<0], 
    CInt(qryTMD.[P-1]) AS [P-1], 
    CInt(qryTMD.[C-1]) AS [C-1], 
    CInt(qryTMD.[P0]) AS [P0], 
    CInt(qryTMD.[C0]) AS [C0], 
    CInt(qryTMD.[P+1]) AS [P+1], 
    CInt(qryTMD.[P+2]) AS [P+2], 
    CInt(qryTMD.[P+3]) AS [P+3] 
    FROM qryTMD) as b 
+0

私もこのようなものを試しました –

+0

@JakeDuddyこれは長時間のショットです:あなたはあなたのvarnamesに数学的演算子をたくさん持っています。多分、Accessはあなたが '[]'で名前を持っているにもかかわらず、それらと数学をしようとしています。たぶん、エイリアスを変更して演算子を削除してみてください。だから、 '[BM∞]'を 'BM_sub_inf'に置き換えてください。 '[RAG_B <0]'と '[RAG_B_l_zero]'など) – Rominus