С приведенной ниже таблицей:
CREATE TABLE 'STOCK_LEVEL'(
'ID' int(11),
'Date' date,
'ProductCode' varchar(50),
'Quantity' int(10)
)
INSERT INTO 'STOCK_LEVEL' ('ID', 'Date', 'ProductCode', 'Quantity') VALUES
(1, '2018-02-10', 'PROD01', 15),
(2, '2018-02-10', 'PROD02', 90),
(3, '2018-02-14', 'PROD03', 5),
(4, '2018-02-14', 'PROD01', 11);
Я хотел бы видеть уровень запасов для данного продукта в определенный день, поэтому я создал запрос по продукту:
SELECT
Date,
(Case when ProductCode = 'PROD01' then Quantity else 0 end) As 'AlphaProduct',
(Case when ProductCode = 'PROD02' then Quantity else 0 end) As 'BetaProduct',
(Case when ProductCode = 'PROD03' then Quantity else 0 end) As 'GammaProduct'
FROM STOCK_LEVEL
WHERE Date IN( '2018-02-10', '2018-02-14')
Который даст мне такой результат:
+------------+--------------+-------------+--------------+
| Date | AlphaProduct | BetaProduct | GammaProduct |
+------------+--------------+-------------+--------------+
| 2018-02-10 | 15 | 0 | 0 |
+------------+--------------+-------------+--------------+
| 2018-02-10 | 0 | 90 | 0 |
+------------+--------------+-------------+--------------+
| 2018-02-14 | 0 | 0 | 5 |
+------------+--------------+-------------+--------------+
| 2018-02-14 | 11 | 0 | 0 |
+------------+--------------+-------------+--------------+
Я, вероятно, пропустил что-то основное, но есть ли способ сгруппировать по дате следующим образом: (Я не могу GROUP BY, поскольку нет агрегата?)
+------------+--------------+-------------+--------------+
| Date | AlphaProduct | BetaProduct | GammaProduct |
+------------+--------------+-------------+--------------+
| 2018-02-10 | 15 | 90 | 0 |
+------------+--------------+-------------+--------------+
| 2018-02-14 | 11 | 0 | 5 |
+------------+--------------+-------------+--------------+
Используйте функцию aa (fake) aggreation и группу
SELECT
Date,
max(Case when ProductCode = 'PROD01' then Quantity else 0 end) As 'AlphaProduct',
max(Case when ProductCode = 'PROD02' then Quantity else 0 end) As 'BetaProduct',
max(Case when ProductCode = 'PROD03' then Quantity else 0 end) As 'GammaProduct'
FROM STOCK_LEVEL
WHERE Date IN( '2018-02-10', '2018-02-14')
group by Date
CASE
вместо функции IF()
?
MAX(Case when ProductCode = '[]' then Quantity else 0 end)
'[]' иGROUP BY date