ежемесячный контрольный список по msaccess - PullRequest
0 голосов
/ 23 января 2019

У меня есть таблица в приведенной ниже форме. Я намерен создать ежемесячный контрольный список.

+-------------+----------------+-----------------+-----------------+
| id          | mem_id         | month_code      | type            |
+-------------+----------------+-----------------+-----------------+
|      1      |  1             |     Jan         |    to           |   
|      2      |  2             |     Feb         |    t            |   
|      3      |  1             |     Feb         |    to           |
|      4      |  3             |     Jan         |    o            |
|      5      |  1             |     Mar         |    o            |   
+-------------+----------------+-----------------+-----------------+

Используется запрос

SELECT distinct(mem_id) as Member,
(SELECT type FROM test where mem_id=Member and month_code='Jan') as Jan,
(SELECT type FROM test where mem_id=Member and month_code='Feb') as Feb,
(SELECT type FROM test where mem_id=Member and month_code='Mar') as Mar
FROM  test

Желаемый результат:

+-------------+----------------+-----------------+-----------------+
| mem_id      | Jan            | Feb             | Mar             |
+-------------+----------------+-----------------+-----------------+
|      1      |  to            |     to          |    o            |   
|      2      |                |     t           |                 |   
|      3      |  o             |                 |                 |   
+-------------+----------------+-----------------+-----------------+

Моя проблема, однако, заключается в том, что код отлично работает на mysql, но на msaccess я получаю всплывающее окно ввода с просьбой ввести значение параметра Member. Как получить правильный вывод в Access?

1 Ответ

0 голосов
/ 23 января 2019

Вместо этого можно выполнить условное агрегирование:

select mem_id,
       max(iif(month_code = 'Jan', type)) as Jan,
       max(iif(month_code = 'Feb', type)) as Feb,
       max(iif(month_code = 'Mar', type)) as Mar
from test t
group by mem_id;

Для вашего запроса имя Member не существует в таблице test, поэтому access считает его parameter.

Итак, вам, вероятно, нужно mem_id вместо:

SELECT t.mem_id as Member,
      (SELECT t1.type FROM test as t1 where t1.mem_id = t.mem_id and t1.month_code='Jan') as Jan,
      (SELECT t1.type FROM test as t1 where t1.mem_id = t.mem_id and t1.month_code='Feb') as Feb,
      (SELECT t1.type FROM test as t1 where t1.mem_id = t.mem_id and t1.month_code='Mar') as Mar
FROM test as t
GROUP BY t.mem_id;

Единственная проблема в том, что с вашей версией, если у одного mem_id есть дубликаты type s для того же month_code, тогда будет выдано subquery error.

Итак, вам нужно top предложение в subquery.

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