1

MS Access 2010 で、[顧客 ID]、[製品]、[価格]、[合計価格]、および [支払い方法] という 2 つの別々のテーブルから次のフィールドを取得するクエリを作成しました。顧客は別の製品を注文することができました。または別の支払い方法を使用してください。現在、各顧客がオンラインで支払った製品のみの合計/合計を提供する計算フィールドを作成しようとしています。

オンラインの【お支払い方法】コードは「D」です。次の式でコード ビルダー式を使用しました。

1) Sum(IIf([顧客ID] = [顧客ID] AND [支払方法] = "D", [価格], NULL))

ただし、次のエラー メッセージが表示され続けます: 集計関数の一部として、指定された式 "Customer ID" を含まないクエリを実行しようとしました。

SQL (または式ビルダー) でそれを行いたい場合、どのようにすればよいでしょうか? これまでに試したことはすべて、同じエラーメッセージにつながります。

編集
私の完全なクエリは次のとおりです。

SELECT CUSTOMER_INFO.ID AS [Customer ID], 
CUSTOMER_INFO.PROD_KEY AS [Product], 
CUSTOMER_INFO.PROD_PRICE AS [Price], 
CUSTOMER_INFO.SUM_PRICE AS [Total Price], 
PAYMENT_TRANZAK.PAY_METHD, 
Sum(IIf([Customer ID]=[Customer ID] And [PAY_MTHD]="D",[Price],[IsNull])) AS [Online Total]

FROM CUSTOMER_INFO INNER JOIN PAYMENT_TRANZAK ON (CUSTOMER_INFO.PROD_KEY= PAYMENT_TRANZAK.SSBSECT_CRN) AND (CUSTOMER_INFO.TERM_CODE_KEY = PAYMENT_TRANZAK.DATE_CODE)

WHERE (
((CUSTOMER_INFO.SUM_PRICE)>0) AND ((PAYMENT_TRANZAK.PAY_METHD) Is Not Null) AND     ((CUSTOMER_INFO.CUST_CODE)="RE" Or (CUSTOMER_INFO.CUST_CODE)="RW") AND   ((CUSTOMER_INFO.DATE_CODE)=[Please enter a transaction date: ]) AND   ((CUSTOMER_INFO.ESTS_CODE)="EL") AND ((CUSTOMER_INFO.STST_CODE)="AS")
)
ORDER BY CUSTOMER_INFO.ID;
4

2 に答える 2

1

集約されていないデータに対して集約を実行しようとしています。合計を行うには、関数に合計するものが必要です。データの「グループ」。Group Byしたがって、そこに句が必要になります。句を追加するGROUP BY CUSTOMER_INFO.IDと、各顧客IDの合計が作成されます。支払いタイプ句をwhereステートメントに追加して、適切な支払いタイプロジックを取得することもできます。

SELECT CUSTOMER_INFO.ID AS [Customer ID]

  , Sum([Price]) AS [Online Total] 
FROM CUSTOMER_INFO 
INNER JOIN PAYMENT_TRANZAK 
ON (CUSTOMER_INFO.PROD_KEY= PAYMENT_TRANZAK.SSBSECT_CRN) 
    AND (CUSTOMER_INFO.TERM_CODE_KEY = PAYMENT_TRANZAK.DATE_CODE)
WHERE (((CUSTOMER_INFO.SUM_PRICE)>0) 
    AND ((PAYMENT_TRANZAK.PAY_METHD) Is Not Null) 
    AND ((CUSTOMER_INFO.CUST_CODE)="RE" Or (CUSTOMER_INFO.CUST_CODE)="RW") 
    AND ((CUSTOMER_INFO.DATE_CODE)=[Please enter a transaction date: ]) 
    AND ((CUSTOMER_INFO.ESTS_CODE)="EL") 
    AND ((CUSTOMER_INFO.STST_CODE)="AS"))
    AND PAYMENT_TRANZAK.PAY_METHD="D"
GROUP BY CUSTOMER_INFO.ID
ORDER BY CUSTOMER_INFO.ID; 

すべてのフィールドがグループ化されているわけではないので、すべてのフィールドを集約していないため、この種のクエリでそれらを表現することはできません。これらは

  • CUSTOMER_INFO.PROD_KEYAS[製品]
  • CUSTOMER_INFO.PROD_PRICEAS[価格]
  • CUSTOMER_INFO.SUM_PRICEAS[合計価格]
  • PAYMENT_TRANZAK.PAY_METHD

したがって、適切な一致ではありません。

しかし、あなたは私よりもあなたのデータをよく知っています、多分それらを論理的に適合させる方法があるでしょう。それはあなた次第です。

編集:フィルタリングを行わないが、グループ化を行うこのようなクエリを試すことができます。これによりすべてが表示され、レポートまたはフォームでフィルタリングを実行します。

SELECT CUSTOMER_INFO.ID AS [Customer ID]
  , CUSTOMER_INFO.CUST_CODE
  , Sum(CUSTOMER_INFO.PROD_PRICE) AS [Online Total] 
  , Sum(CUSTOMER_INFO.SUM_PRICE) as [SumOfSumPrice]
  , CUSTOMER_INFO.CUST_CODE
  , PAYMENT_TRANZAK.PAY_METHD
  , CUSTOMER_INFO.DATE_CODE
  , CUSTOMER_INFO.ESTS_CODE
  , CUSTOMER_INFO.STST_CODE
FROM CUSTOMER_INFO 
INNER JOIN PAYMENT_TRANZAK 
ON (CUSTOMER_INFO.PROD_KEY= PAYMENT_TRANZAK.SSBSECT_CRN) 
    AND (CUSTOMER_INFO.TERM_CODE_KEY = PAYMENT_TRANZAK.DATE_CODE)
GROUP BY CUSTOMER_INFO.ID
  , CUSTOMER_INFO.CUST_CODE
  , PAYMENT_TRANZAK.PAY_METHD
  , CUSTOMER_INFO.DATE_CODE
  , CUSTOMER_INFO.ESTS_CODE
  , CUSTOMER_INFO.STST_CODE
ORDER BY CUSTOMER_INFO.ID;
于 2012-12-12T20:00:20.247 に答える
0

MS SQL SERVER、ORACLE、MS ACCESS では、select 句の他のすべてのフィールドを集計句に追加する必要があります。

この件に関して Access Help が述べていることから始めると役立つ場合があります。

Jet SQL ヘルプ: SELECT フィールド リストのすべてのフィールドは、GROUP BY 句に含めるか、SQL 集計関数の引数として含める必要があります。ヘルプ システムからのこの引用は、複合参照内であっても、フィールドへのすべての参照が必要であることを意味します。集計される (つまり、上記の集計関数のいずれかに含まれる) か、GROUP BY 句に含まれます。いずれかのタイプの式は、集約されていると見なされます。集計関数は、集計されていないフィールドに解決されるフィールド参照式のみを取ることができます (つまり、データを複数回集計することは同様に無効です)。

参照

集計関数はとにかくクエリを集計しているため、group by 句なしで試してみてください。または、これらの各フィールドを含めることもできます。問題は主にあなたの場合である可能性があります.2つの異なるフィールドがあり、IIFまだnullが処理されていません. 集計の場合、ゼロを使用するか、IsnullIIF を合計する必要があることを確認します。

PS: モバイルから回答を送信しましたが、初めて完全な回答が公開されていないようです。

于 2012-12-12T18:20:03.310 に答える