3

以下は私のSOQLクエリです。

select COUNT(Id) FROM Payroll_Group_Detail__c where Tax_Batch__c=null and CreatedDate >=2012-07-21T00:00:00-05:00 and Total_Tax_Amount__c!=null GROUP By Company__c,Name,Payment_Date__c,Pay_Cycle_Type__c;

このgroupby句によって返される行数を数えようとしていました。しかし、1つのカウントを取得する代わりに、複数の行を取得します。このグループ化によって返される行の総数を取得するにはどうすればよいですか?

ありがとう、カルビン

4

4 に答える 4

10

レコードを数えるだけ:

Integer counter = [ Select count() 
                    FROM Payroll_Group_Detail__c 
                    Where Tax_Batch__c = null 
                    And CreatedDate >= 2012-07-21T00:00:00-05:00 
                    And Total_Tax_Amount__c != null ];

System.debug('My counted records: ' + counter);

GROUP BYの場合:

AggregateResult[] aggr = [ Select count(Id) 
                           FROM Payroll_Group_Detail__c 
                           Where Tax_Batch__c = null 
                           And CreatedDate >= 2012-07-21T00:00:00-05:00 
                           And Total_Tax_Amount__c != null
                           Group By Total_Tax_Amount__c ];

Integer counter = Integer.valueOf(aggr.size());

System.debug('#### counter: ' + counter);

ただし、許可されたガバナー制限(SOQLクエリによって取得されたレコードの総数-> 50,000)を超えてカウントすることはできません。

于 2012-08-22T06:44:46.807 に答える
2

グループ化は、グループ化フィールドの一意の値ごとに行を返します。

SalesforceGroupByドキュメント

Tax_Branch__cが空白で、Total_Tax_Amount__cが設定されている、2012年7月21日以降に作成されたPayroll_Group_Detail__cの合計が必要な場合は、GroupByステートメントを緩めます。

于 2012-08-21T21:57:07.990 に答える
1

これについて助けを求めている私のような他の貧しい人々のために-集約関数の後にエイリアスを使用しなかった場合は、これを使用してください:

Object counter = aggr[0].get('expr0');

集計関数の後にエイリアスを使用した場合は、次のように使用できます。

Object counter = aggr[0].get('myalias');

ドキュメントを参照してください:SOQL集計関数の操作

于 2016-10-10T14:28:44.250 に答える
0

aggr.sizeはあなたが必要としているものではないと思います

Integer counter = Integer.valueOf(aggr.size());

カウントは、AggregateResultオブジェクトのexpr0フィールドに返されます。aggr.get('expr0')

動作します。カウントとともに他のフィールドリターンがある場合は、次のリンクの例を参照してください

集計SOQLクエリの結果をVisualforceページに表示するにはどうすればよいですか?

于 2013-09-13T17:47:27.330 に答える