как посчитать повторение значения из нескольких столбцов? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть таблица доступа (называемая year2016) со столбцами месяцев и строками имен клиентов и именем работника, который выполнил работу в этом месяце.я хочу SQL-код, который даст мне, сколько клиентов каждый работник имел месяцмесяцев) но это выдает мне ошибку:

SELECT a.name, c1.count, c2.count
FROM (SELECT month01 AS name FROM year2016 UNION SELECT month02 FROM year2016) a
LEFT JOIN (SELECT month01, COUNT(*) AS count FROM year2016 GROUP BY month01) c1
ON a.name=c1.month01
LEFT JOIN (SELECT month02, COUNT(*) AS count FROM year2016 GROUP BY month02) c2
On a.name=c2.month02;

Я ожидаю получить такую ​​таблицу:

worker     month01     month02    month03    month04 ......
john           8           14        5          9
adam           12            6          5        3
sarah           4            6         34        56

1 Ответ

2 голосов
/ 04 апреля 2019

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

SELECT
    worker,
    SUM(IIF(month='month01', 1, 0)) AS month01,
    SUM(IIF(month='month02', 1, 0)) AS month02,
    SUM(IIF(month='month03', 1, 0)) AS month03,
    SUM(IIF(month='month04', 1, 0)) AS month04,
    SUM(IIF(month='month05', 1, 0)) AS month05,
    SUM(IIF(month='month06', 1, 0)) AS month06,
    SUM(IIF(month='month07', 1, 0)) AS month07,
    SUM(IIF(month='month08', 1, 0)) AS month08,
    SUM(IIF(month='month09', 1, 0)) AS month09,
    SUM(IIF(month='month10', 1, 0)) AS month10,
    SUM(IIF(month='month11', 1, 0)) AS month11,
    SUM(IIF(month='month12', 1, 0)) AS month12
FROM
(
    SELECT month01 AS worker, 'month01' AS month FROM year2016 UNION ALL
    SELECT month02, 'month02' FROM year2016 UNION ALL
    SELECT month03, 'month03' FROM year2016 UNION ALL
    SELECT month04, 'month04' FROM year2016 UNION ALL
    SELECT month05, 'month05' FROM year2016 UNION ALL
    SELECT month06, 'month06' FROM year2016 UNION ALL
    SELECT month07, 'month07' FROM year2016 UNION ALL
    SELECT month08, 'month08' FROM year2016 UNION ALL
    SELECT month09, 'month09' FROM year2016 UNION ALL
    SELECT month10, 'month10' FROM year2016 UNION ALL
    SELECT month11, 'month11' FROM year2016 UNION ALL
    SELECT month12, 'month12' FROM year2016
) t
GROUP BY
    worker;

Но учтите, что ваши данные вообще не нормализуются. Подзапрос, который я назвал t выше, - это то, как вы должны хранить свои данные в Access. Поэтому попробуйте изменить свой дизайн, если можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...