0

このアクセス エラー メッセージに関していくつかの質問があることは承知していますが、私のクエリでは DISTINCT キーワードが使用されていないため、それらは関連していません。

2 つの同様のクエリがあります。1 つはクレジットを含み、もう 1 つはデビットを含みます。それらは、月ごとおよびカテゴリごとにグループ化されています。

最終的には、これら 2 つのテーブルを完全に外部結合して、それらを減算して各カテゴリの各月の結果の残高を取得できるようにする必要があります。

ただし、Access では完全な外部結合が許可されていないため、Right OUTER UNION LEFT OUTER WHERE Null を実行する必要があります。

今、Month フィールドと Category ID フィールドで RIGHT OUTER 結合を実行しようとしています。1 つのフィールドで外部結合を実行すると、期待どおりに機能します。他のフィールドで行うと期待どおりに機能しますが、両方のフィールドに参加すると、「フィールドが小さすぎて、追加しようとしたデータの量を受け入れることができません」というメッセージが表示されます

表1:

クレジット クエリ

によって生産:

SELECT [transactions by category].[categoryid]                    AS CategoryID,
       Format([account transactions].[transaction date], "mm/yy") AS MonthYear,
       Nz(SUM([transactions by category].[amount]), 0)            AS
       [Category Total]
FROM   [transactions by category]
       INNER JOIN [account transactions]
               ON [account transactions].[id] =
                  [transactions by category].[transactionid]
WHERE  [account transactions].[transaction type] <> 8
GROUP  BY Format([account transactions].[transaction date], "mm/yy"),
          [transactions by category].[categoryid]; 

表 2:

借方表

によって生産:

SELECT [transactions by category].[categoryid],
       Format([account transactions].[transaction date], "mm/yy") AS MonthYear,
       Nz(SUM([transactions by category].[amount]), 0)            AS
       [Category Total]
FROM   [transactions by category]
       INNER JOIN [account transactions]
               ON [account transactions].[id] =
                  [transactions by category].[transactionid]
WHERE  [account transactions].[transaction type] = 8
GROUP  BY Format([account transactions].[transaction date], "mm/yy"),
          [transactions by category].[categoryid]; 

私にエラーを与える正しい結合:

SELECT * FROM
  ((SELECT [transactions by category].[categoryid],
           Format([account transactions].[transaction date], "mm/yy") 
              AS MonthYear,
           Nz(SUM([transactions by category].[amount]), 0) AS [Category Total]
    FROM   [transactions by category]
           INNER JOIN [account transactions]
                   ON [account transactions].[id] =
                      [transactions by category].[transactionid]
    WHERE  [account transactions].[transaction type] = 8
    GROUP  BY Format([account transactions].[transaction date], "mm/yy"),
              [transactions by category].[categoryid]) AS [Category Returns]
RIGHT JOIN 
   (SELECT [transactions by category].[categoryid] AS CategoryID,
           Format([account transactions].[transaction date], "mm/yy") 
               AS MonthYear,
           Nz(SUM([transactions by category].[amount]), 0) AS [Category Total]
    FROM   [transactions by category]
           INNER JOIN [account transactions]
                   ON [account transactions].[id] = 
                      [transactions by category].[transactionid]
    WHERE  [account transactions].[transaction type] <> 8
    GROUP  BY Format([account transactions].[transaction date], "mm/yy"),
              [transactions by category].[categoryid]) AS [Category Debits]

ON [Category Returns].[categoryid] = [Category Debits].[categoryid]
   AND [Category Returns].[monthyear] = [Category Debits].[monthyear] ); 

このエラーはテキスト フィールドで発生するようです。Format を使用すると、MonthYear フィールドはテキスト フィールドになりますか? それでも長さはわずか5文字です。さらに、MonthYear 列でのみ結合すると結合が機能しますが、両方のフィールドで結合すると失敗します。

4

1 に答える 1

2

タグによると、バックエンドとして SQL サーバーを使用しています。発生している問題は、MS Access によるものではなく、MS Access と SQL Server の組み合わせによるものです。クエリは、純粋な MS Access 環境で機能します。(はい、形式はテキストに変換されます。)

パススルー クエリを使用して、SQL Server 構文を使用して実行されるクエリを作成できるため、完全な外部結合を使用できます。 /19/Full-Outer-Joins.aspx

タグの変更を編集

フィールドの 1 つがメモ フィールドである場合は、http://support.microsoft.com/kb/896950を参照してください。このような複雑なクエリでは、メモ フィールドを 255 以下にトリミングすることをお勧めします。

于 2012-07-10T10:30:38.030 に答える