Это проблема Сводная таблица .Вам нужно будет использовать условное агрегирование с предложением Group By
.
- Сделайте
Inner Join
между двумя таблицами, используя ProductID
. - Мы делаем
Group By
на ProductId
и Name
, так как вы хотите одну строку для продукта со всеми ценами в одной строке. - Теперь мы будем использовать условную функцию
If()
для определения цены для столбца конкретной валюты.Если код валюты соответствует этому столбцу, мы учитываем это значение цены, в противном случае мы рассматриваем null
.Так, например, в столбце с псевдонимом EUR
у нас будут значения null
для остальных валют (кроме евро).Затем мы будем использовать функцию Max()
, чтобы убедиться, что мы учитываем только соответствующую цену валюты. - Если в таблице
Prices
нет значения цены для конкретной валюты, она должнав качестве значения null
(все валюты будут отображать null
и Max(null, null, ...) = null
- В итоге мы
Order By ProductID ASC
получим результат , отсортированный в порядке возрастания по ProductID
.
Попробуйте следующий запрос:
SELECT pdt.ProductID,
pdt.Name,
MAX( IF(prc.Currency = 'EUR', prc.Price, NULL) ) AS EUR,
MAX( IF(prc.Currency = 'USD', prc.Price, NULL) ) AS USD,
MAX( IF(prc.Currency = 'JPY', prc.Price, NULL) ) AS JPY
FROM Products AS pdt
INNER JOIN Prices AS prc ON prc.ProductID = pdt.ProductID
GROUP BY pdt.ProductID, pdt.Name
ORDER BY pdt.ProductID ASC