Подсчитать количество вхождений в категории, сгруппированных по дате - PullRequest
0 голосов
/ 24 июня 2019

У меня есть список строк данных (~ 7000), помеченных датами начала их недели.Каждая строка данных имеет определенную категорию, связанную с ней, я хочу создать запрос или таблицу результатов, которая берет каждую уникальную дату начала недели и суммирует значения для каждой категории на основе строк данных, которые имеют дату начала этой недели.

Я пытался использовать комбинацию запросов доступа и модификаций Excel.

Мои текущие данные выглядят примерно так:

Category    week
A               5/20/2019
B               5/20/2019
B               5/20/2019
C               5/20/2019
A               5/20/2019
A               5/13/2019
C               5/13/2019
C               5/13/2019
B               5/6/2019
A               5/6/2019
A               5/6/2019

Я хочу что-то в формате:

week              A      B      C
5/20/2019         2      2      1
5/13/2019         1      0      2
5/6/2019          2      1      0

будь то в нескольких запросах или где-то еще, мне просто нужно разделить эти данные следующим образом.

Ответы [ 3 ]

2 голосов
/ 24 июня 2019

Вы можете использовать сводную таблицу:

Создать сводную таблицу, выбрав все данные (включая заголовок)

enter image description here

2 голосов
/ 24 июня 2019

Одним из возможных способов является использование условного агрегирования, например ::100100

select 
    t.week,
    sum(iif(t.category = "A", 1, 0)) as A,
    sum(iif(t.category = "B", 1, 0)) as B,
    sum(iif(t.category = "C", 1, 0)) as C
from 
    YourTable t
group by
    t.week

Если вы хотите сгруппировать несколько категорий вместе, чтобы они были перечислены как одна категория, вы можете использовать выражение in в тестовых выражениях для операторов iif:

select 
    t.week,
    sum(iif(t.category = "A", 1, 0)) as A,
    sum(iif(t.category = "B", 1, 0)) as B,
    sum(iif(t.category = "C", 1, 0)) as C,
    sum(iif(t.category in ("D","E","F"), 1, 0)) as D
from 
    YourTable t
group by
    t.week

В качестве альтернативы, вы можете использовать запрос кросс-таблицы, например ::10000

transform count(*)
select t.week
from YourTable t
group by t.week
pivot t.category;

Измените YourTable на имя вашей таблицы.

0 голосов
/ 24 июня 2019

На мой взгляд, лучший способ, поскольку вы упомянули MS Access в своих тегах, это использовать встроенные методы:

    TRANSFORM Count(tblMyTableName.week) AS [Count-week]
    SELECT tblMyTableName.week
    FROM tblMyTableName
    GROUP BY tblMyTableName.week
    PIVOT tblMyTableName.Category;

Где tblMyTableName - имя вашей таблицы.

...