Используйте дату в столбце в качестве заголовка столбца в результате запроса

#mysql #sql

#mysql — сервер #sql

Вопрос:

DB-Fiddle

 CREATE TABLE operations (
    id int auto_increment primary key,
    time_stamp DATE,
    product VARCHAR(255),
    quantity INT
);

INSERT INTO operations
(time_stamp, product, quantity
)
VALUES 
("2020-01-01", "Product_A", "600"),
("2020-01-01", "Product_B", "400"),
("2020-01-01", "Product_C", "700"),
("2020-03-15", "Product_A", "300"),
("2020-03-15", "Product_B", "500"),
("2020-03-15", "Product_C", "900"),
("2020-03-15", "Product_D", "150");
  

Ожидаемый результат:

 Product           2020-01-01       2020-03-15  
Product_A             600              300
Product_B             400              500
Product_C             700              900
Product_D               0              150 
  

В приведенном выше результате я хочу распределить quantity per time_stamp в двух разных столбцах.
Для этого я использую приведенный ниже запрос:

 SELECT
product,
SUM(CASE WHEN time_stamp = '2020-01-01' THEN quantity ELSE 0 END) AS time_stamp_01,
SUM(CASE WHEN time_stamp = '2020-03-15' THEN quantity ELSE 0 END) AS time_stamp_02
FROM operations 
GROUP BY 1;
  

Как вы можете видеть в запросе, столбцы называются time_stamp_01 и time_stamp_02 .
Однако я хочу, чтобы использовалась дата 2020-01-01 и 2020-03-15 .
Что мне нужно изменить в запросе для достижения этого?


ПРИМЕЧАНИЕ: в таблице всегда будет только два time_stamps .

Ответ №1:

Если у вас есть фиксированные даты, вы можете использовать их в качестве имен столбцов, но их нужно экранировать:

 SELECT product,
       SUM(CASE WHEN time_stamp = '2020-01-01' THEN quantity ELSE 0 END) AS `2020-01-01`,
       SUM(CASE WHEN time_stamp = '2020-03-15' THEN quantity ELSE 0 END) AS `2020-03-15`
FROM operations 
GROUP BY 1;
  

Если вы хотите извлечь значения из таблицы, тогда вам нужно использовать динамический SQL.