5

クエリ結果を次のようにしたい:

          Person1 Person2 Person3 Person4    Total 
Status1         2       4       7       3      16
Status2         0       1       0       3      4
Status3         0       0       0       0      0
Status4         0       1       3       0      4
Total           2       6       10      6      24

一番下の行を除くすべてを次のように取得できます。

TRANSFORM Count(personName) 
SELECT status, Count(status) AS Total
FROM table1 
GROUP BY status
PIVOT personName

UNION を使用して最後の行にタックすることについて何かを見つけましたが、それを正しく理解できないようです。これは一般的な活動であるべきだと思われます。

4

5 に答える 5

5

基本的に、クエリを2回実行する必要があります。1回目はデータを取得し、2回目は集計を提供します。これを実行するように設定されている場合は、データを返す最初のクエリを独自のオブジェクトにします。次に、別のクエリを作成して、最初のオブジェクトを別のオブジェクトに集約します。最後の3番目のクエリオブジェクトを作成して、UNION前述のようにを使用して2つを結合します。

私はこれを本当にお勧めしませんと言わなければなりませんが。SQLに、実際に表示情報であるものを生成させようとしているようです(つまり、同じデータセットに属していない)。

于 2011-04-25T18:44:42.827 に答える
5

実は、この問題には簡単な解決策があります。クロス集計クエリをデザインしたら、クエリ内でデザイン モードに入り、[ホーム] タブの [レコード] セクションで [合計] を選択します。次に、Sum または Count などを選択できます。

手順を示すリンクは次のとおりです。http://office.microsoft.com/en-us/access-help/display-column-totals-in-a-datasheet-HA001233062.aspx

于 2013-05-31T14:11:00.763 に答える
0

私も解決策を探していました。クロス集計に基づいてクエリを作成し、それを合計してユニオンクエリの下部に追加する以外は、いずれかを見つけることができませんでした。私はフォーム内からすべての SQL ステートメントを実行しようとしているので (展開がより管理しやすい)、このアプローチは好きではありません: コードから Querydef/view を作成または再入力するなどです。

フォームのサブフォームに結果を表示する場合は、次のようにします。

サブフォームの下、および 1 つのレコードのみを保持するのに十分短い別のサブフォーム。

次のように、フォーム内のコントロールを関数にバインドします。

control1 = fnADOSum(yourCrosstabfield1, yourCrosstabSQL) 

Public Function fnADOSum(fldName As String, strInputSQL As String) As Double
    On Error GoTo ERRHANDLER

    Dim RS1 As ADODB.Recordset
    Dim cnn As ADODB.Connection
    Dim StrSQL As String
    Dim dblRunTot As Double


    Set RS1 = New ADODB.Recordset
    RS1.CursorLocation = adUseServer
    Set cnn = CurrentProject.Connection

    dblRunTot = 0

    With RS1
    .Open strInputSQL, cnn, adOpenForwardOnly, adLockReadOnly
        If Not .EOF And Not .BOF Then
            .MoveFirst
            Do Until .EOF
            dblRunTot = dblRunTot + Nz(.Fields(fldName).Value, 0)
            .MoveNext
            Loop
        End If
    .Close
    End With

    fnADOSum = dblRunTot

    'CLEAN UP:
    cnn.Close
    Set RS1 = Nothing
    Set cnn = Nothing


    EXITHANDLER:
    Exit Function

    ERRHANDLER:
    '' your own error handling proc
    '' LogError err.Number, err.Description


End Function
于 2015-10-06T20:59:47.173 に答える