2016-09-18 17 views
1

以下は私のデータベースの値です。日付の列のSQL集計値

db_values

私は、列ヘッダーの日付単位の値の合計を探していますし、私はMS Accessデータベースを持っています。誰も私はSQLクエリを構築するのに役立つことができますか? 以下の出力を確認してください。

output

答えて

2

あなたは日付のセットを知っている場合は、条件付きの集約を使用することができます。 MS Accessでは、これはiif()機能を使用します。日付は文字列のように見えます:

select a, b, c, d, 
     sum(iif(store_date = '17-09-2016', val, 0)) as [17-09-2016], 
     sum(iif(store_date = '18-09-2016', val, 0)) as [18-09-2016], 
     sum(iif(store_date = '19-09-2016', val, 0)) as [19-09-2016], 
     sum(iif(store_date = '20-09-2016', val, 0)) as [20-09-2016] 
From t 
Group by a, b, c, d; 

日付は、組み込みの日付データ型を使用してデータベースに保存する必要があります。ただし、文字列として格納する必要がある場合は、ISO標準のYYYY-MM-DD形式を使用することを強くお勧めします。これは、順序付けや範囲の比較に使用できるので便利です。

+0

ありがとうございました。これは動作します:) – Hemant

2

条件付き集約ピボットが実行できない日付が数百になる可能性がある場合は、crosstab queryをJet/ACE SQLダイアレクト(他のRDMSでは使用できません)で使用できる一意のSQL操作と見なしてください。

TRANSFORM SUM(t.val) AS SumOfVal 
SELECT t.A, t.B, t.C, t.D 
FROM MyTable t 
GROUP BY t.A, t.B, t.C, t.D 
PIVOT t.Store_date; 

注意:Accessテーブル/クエリには255個の制限があります。したがって、テーブルの結果が250以上のユニークな日付になる場合は、複数のクロス集計に分割する必要があります。それに応じて日付をフィルタリングすることができます。

TRANSFORM SUM(t.val) AS SumOfVal 
SELECT t.A, t.B, t.C, t.D 
FROM MyTable t 
GROUP BY t.A, t.B, t.C, t.D 
PIVOT t.Store_date IN ('17-09-2016', '18-09-2016', '20-09-2016');