Как мне удалить дубликат даты и времени, а также преобразовать значение одного столбца в новое имя столбца?

#sql

#sql

Вопрос:

 | datetime    | id     |name     | value   |
--------------------------------------------
| 2020-01-01  | 1      | foo     | 23      |
--------------------------------------------
| 2020-01-01  | 2      | foo     | 24      |
--------------------------------------------
| 2020-01-02  | 1      | foo     | 43      |
--------------------------------------------
| 2020-01-02  | 2      | foo     | 45      |
  

Мне нужен ответ что-то вроде.

 datetime   |  1_foo   | 2_foo  |
--------------------------------
2020-01-01 | 23       | 24     |
--------------------------------
2020-01-02 | 43       | 45     |
  

Чего я достиг до сих пор, так это

 | datetime    | 1_foo  |2_foo    |
----------------------------------
| 2020-01-01  | 23     | null    |
----------------------------------
| 2020-01-01  | null   | 24      |
----------------------------------
| 2020-01-02  | 43     | null    | 
----------------------------------
| 2020-01-02  | null   | 45      |
  

Комментарии:

1. (1) Я удалил несовместимые теги базы данных. Пожалуйста, помечайте только используемую вами базу данных. (2) Объясните логику, которую вы хотите реализовать. (3) Покажите запрос, выдающий результаты, которые вы сейчас получаете.

2. Спасибо за обновление, а также за исправление меня. Отличное обучение😃.

Ответ №1:

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

 select datetime,
       max(case when id = 1 then value end) as value_1,
       max(case when id = 2 then value end) as value_2
from t
group by datetime;
  

Я не уверен, что name связано с результатами. Вы также можете захотеть where name = 'foo' в запросе.

Комментарии:

1. здесь name ничего, но вы можете принять его как «column_name». Я не был очень конкретен с именем столбца. Спасибо за ответ