2016-10-17 13 views
1

現在、私は次のようになり、私のAccessテーブルにデータを持っている:私はデータとして表示するために必要なものいくつかのレコードを1つのデータレコードに格納する方法はありますか?

Cat| Sept 1 2016 
Cat| Sept 2 2016 
Cat| Sept 3 2016 
Bobcat| Sept 1 2016 
Bobcat| Sept 2 2016 
Bobcat| Sept 3 2016 
Bobcat| Sept 5 2016 
Bobcat| Sept 6 2016 
Bobcat| Sept 7 2016 

は次のとおりです。「名前」「日付1のようにフィールド名と

Cat| Sept 1 2016| Sept 2 2016| Sept 3 2016 
Bobcat| Sept 1 2016| Sept 2 2016| Sept 3 2016|Null| Sept 5 2016| Sept 6 2016| Sept 7 2016 

"、" Date2 "、" Date3 "...." Date31 "。私はこのフォーマットで作業している。

私がクロス集計クエリを試してみると、日付は9月1日2016 | 2016年9月2日| 2016年9月3日がフィールド名になり、カウント(またはMAX、LAST、MINなど)が表示されます。しかし、これらの日付はデータとして表示する必要があります。これについてどうすればいいですか?

+0

クイックフィックスコピー&ペースト移調やトランスポーズ機能とVBAでそれを作成することです。 – user3553260

+0

私はこの方法を検討しましたが、これは月単位で生成する必要のある種類の「レポート」の一部であり、これを行うためには存在しないかもしれません。 – Macellaria

+0

サンプルデータをさらに表示してください。複数のカテゴリがある場合はどうなりますか? – Andre

答えて

1

実際には、非数値データで実行できるMAX()またはMIN()を指定するクロスタブを使用できます。ただし、列名が対応する値を繰り返すことがわかります。

SELECT t.ID, t.User, t.Date, 
     'Day' & Day(CDate(t.Date)) As DayCol 
FROM TableData t; 

-- ID User UDate   DayCol 
-- 1 Cat  Sept 1 2016 Day1 
-- 2 Cat  Sept 2 2016 Day2 
-- 3 Cat  Sept 3 2016 Day3 
-- 4 Bobcat Sept 1 2016 Day1 
-- 5 Bobcat Sept 2 2016 Day2 
-- 6 Bobcat Sept 3 2016 Day3 
-- 7 Bobcat Sept 5 2016 Day5 
-- 8 Bobcat Sept 6 2016 Day6 
-- 9 Bobcat Sept 7 2016 Day7 

TRANSFORM MAX(q.Date) AS MaxOfUDate 
SELECT q.User 
FROM TableDataQ q 
GROUP BY q.User 
PIVOT q.DayCol; 

-- User  Day1   Day2   Day3   Day5   Day6   Day7 
-- Bobcat Sept 1 2016 Sept 2 2016 Sept 3 2016 Sept 5 2016 Sept 6 2016 Sept 7 2016 
-- Cat  Sept 1 2016 Sept 2 2016 Sept 3 2016  

最後に、あなたはクロスタブがシーケンシャル日は含まれませんわかります:、個別の列名を取得しますが、その後、クロスタブを実行中に、間のクエリを使用して検討する

TRANSFORM MAX(t.Date) AS MaxOfUDate 
SELECT t.User 
FROM TableData t 
GROUP BY t.User 
PIVOT t.UDate; 

-- User  Sept 1 2016 Sept 2 2016 Sept 3 2016 Sept 5 2016 Sept 6 2016 Sept 7 2016 
-- Bobcat Sept 1 2016 Sept 2 2016 Sept 3 2016 Sept 5 2016 Sept 6 2016 Sept 7 2016 
-- Cat  Sept 1 2016 Sept 2 2016 Sept 3 2016  

(例えば、Day4)が含まれます。幸いなことに、あなたはPIVOT...IN()句で列を指定することができます:それは神話ではないのですが、

TRANSFORM MAX(q.Date) AS MaxOfUDate 
SELECT q.User 
FROM TableDataQ q 
GROUP BY q.User 
PIVOT q.DayCol IN ('Day1', 'Day2', 'Day3', 'Day4', 'Day5', 
        'Day6', 'Day7', 'Day8', 'Day9', 'Day10', 
        'Day11', 'Day12', 'Day13', 'Day14', 'Day15', 
        'Day16', 'Day17', 'Day18', 'Day19', 'Day20', 
        'Day21', 'Day22', 'Day23', 'Day24', 'Day25', 
        'Day26', 'Day27', 'Day28', 'Day29', 'Day30', 'Day31'); 

-- User  Day1   Day2   Day3   Day4 Day5   Day6  ... 
-- Bobcat Sept 1 2016 Sept 2 2016 Sept 3 2016   Sept 5 2016 Sept 6 2016 ... 
-- Cat  Sept 1 2016 Sept 2 2016 Sept 3 2016   
+0

の最後の4-6ヶ月を閲覧することをお勧めします。非常に徹底的。 –

+0

ありがとう、良いサー! OPが同意することを祈りましょう。 – Parfait

+0

うわー、ありがとう!私はこれを試してみるつもりです! – Macellaria

関連する問題