Разделить список дат по месяцам SQL - PullRequest
0 голосов
/ 31 января 2019

У меня есть список идентификаторов и даты их появления.

id|date
1 |2019-01-22
2 |2019-02-13
etc

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

SELECT 
        `a`.`sourceID` AS `Jan 2019`
    FROM
        `all_dates` `a`
    WHERE
        ((MONTH(`a`.`next1`) = 1)
            AND (YEAR(`a`.`next1`) = 2019))

как один столбец, я хочу 12 столбцов для каждого месяца в 2019 году. Я не хочу объединения (насколько я могу судить).Я не уверен, что я просто ввел неправильный синтаксис для подзапроса или мне нужно использовать объединение или что.

(SELECT 
        `a`.`sourceID`
    FROM
        `all_dates` `a`
    WHERE
        ((MONTH(`a`.`next1`) = 1)
            AND (YEAR(`a`.`next1`) = 2019))) AS `Jan 2019`,
(SELECT 
        `a`.`sourceID`
    FROM
        `all_dates` `a`
    WHERE
        ((MONTH(`a`.`next1`) = 2)
            AND (YEAR(`a`.`next1`) = 2019))) AS `Feb 2019`

Я получаю сообщение об ошибке "подзапрос возвращает более 1 строкис вышесказанным.Я на правильных линиях и мне просто нужно это почистить или мне нужно что-то еще делать?

Результат, который я хочу, должен выглядеть следующим образом:

|jan-2019|feb-2019
| 1      |2
| 4      |3

и т. Д.

1 Ответ

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

Следующий запрос является косвенным, также выход имеет нулевые значения, которые не удовлетворяют условию, попробуйте

 SELECT 
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '01') THEN `tablename`.`id`
        ELSE NULL
    END) AS `jan_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '02') THEN `tablename`.`id`
        ELSE NULL
    END) AS `feb_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '03') THEN `tablename`.`id`
        ELSE NULL
    END) AS `mar_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '04') THEN `tablename`.`id`
        ELSE NULL
    END) AS `apr_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '05') THEN `tablename`.`id`
        ELSE NULL
    END) AS `may_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '06') THEN `tablename`.`id`
        ELSE NULL
    END) AS `jun_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '07') THEN `tablename`.`id`
        ELSE NULL
    END) AS `jul_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '08') THEN `tablename`.`id`
        ELSE NULL
    END) AS `aug_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '09') THEN `tablename`.`id`
        ELSE NULL
    END) AS `sep_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '10') THEN `tablename`.`id`
        ELSE NULL
    END) AS `oct_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '11') THEN `tablename`.`id`
        ELSE NULL
    END) AS `nov_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '12') THEN `tablename`.`id`
        ELSE NULL
    END) AS `dec_2019`
FROM
    `tablename`;
...