2016-06-23 20 views
0

PIVOTコマンド(クロス集計クエリ)を実行した後に別の新しい行をテーブルに追加するには、本当に助けが必要です。PIVOTの後にテーブルの下部に列の合計(合計)を挿入する

私の目的は[Request Types]の各列の合計を数え、その列の合計をテーブルの下の新しい行に挿入することです。

これは私にとってロケット科学のようで、SQL言語/領域に関する私の能力と知識を超えています。

ここに私のテーブル内のデータを簡単にスクリーンショットです:ここで

enter image description here

はTableAの

TRANSFORM Count([Division]) AS CountOfDivision 
SELECT [Branch], [Division] 
FROM TableA 
GROUP BY [Branch], [Division] 
PIVOT [Request Type] 

のクロス集計クエリを実行した後、テーブルから取得したデータを簡単にスクリーンショットですenter image description here

これは私が達成しようとしているものの望ましい結果/期待される結果です:

enter image description here

+0

答えを明かすことなく、私はあなたにヒントを与えます:UNION – EastOfJupiter

+0

私は完全に失われており、髪が出る。私は答えを求めて何時間もグーグルで行ってきました。これもできますか?どのようにあなたは連合の質問に固執し、それはどのように適合しますか? – BobbyJones

+0

はい、できます。 UNIONをここ(Google)で検索してください。これは、2つの異なるクエリ(同じ列*重要*)を使用して動作し、最初のクエリの最後に2番目のクエリを処理します。 – EastOfJupiter

答えて

0

元記事へのコメントで述べたように、私は、SQL ServerとないMS Accessを使用に制限しています。ただし、この例では依然として質問に答える有効な方法が提供されていますが、MS AccessのクエリでUNION文を使用することをお勧めします。

すべてのレコードの下に「合計」行を作成するには、同じSQLを使用して集計クエリを作成する必要があります(集計する列に集計関数を追加する必要があります)。

ここではCASEステートメントを使用して、ロジックをクロス集計とピボットの複雑さを増やすことなく少し簡単にしています。このクエリの

SELECT A.Branch 
     ,A.Division 
     ,CASE WHEN A.RequestType = 'Report' THEN 1 ELSE 0 END AS Report 
     ,CASE WHEN A.RequestType = 'Financial Analysis' THEN 1 ELSE 0 END AS FinancialAnalysis 
     ,CASE WHEN A.RequestType = 'Letter' THEN 1 ELSE 0 END AS Letter 
     ,CASE WHEN A.RequestType = 'Research Paper' THEN 1 ELSE 0 END AS ResearchPaper 
    FROM TableA 

UNION 

SELECT 'TOTAL' 
     ,NULL 
     ,SUM(CASE WHEN A.RequestType = 'Report' THEN 1 ELSE 0 END) AS Report 
     ,SUM(CASE WHEN A.RequestType = 'Financial Analysis' THEN 1 ELSE 0 END) AS FinancialAnalysis 
     ,SUM(CASE WHEN A.RequestType = 'Letter' THEN 1 ELSE 0 END) AS Letter 
     ,SUM(CASE WHEN A.RequestType = 'Research Paper' THEN 1 ELSE 0 END) AS ResearchPaper 
    FROM TableA 

結果は次のようになります。

Branch Division Report FinancialAnalysis Letter ResearchPaper 
ASFA ASFAA  1  0     0  0 
ASFA ASFAB  1  0     0  0 
ASFA ASFAD  0  0     0  1 
ASFB ASFBE  0  0     1  0 
ASFC ASFCC  0  1     0  0 
TOTAL NULL  2  1     1  1 

これを表にすべての列を取ることによって動作します最初のクエリを形成し、それらをもう一度照会するだけでなく、それらを追加します。これにより、最初のクエリに追加される単一の行のみが生成されます。

MS Accessを使用している場合、VBAでこのロジックをコーディングしていない限り、上記で使用したCASEの文は機能しません。 MSアクセスのSQLコードは、SWITCHまたはの関数を代わりに使用する必要があります。

関連する問題