Сегодня утром над тарелкой с хлопьями я быстро вычеркнул двухэтапный подход для динамического получения желаемого результата.
if (!$conn = new mysqli("localhost", "root","","dbname")) {
echo "Database Connection Error"; // $conn->connect_error
} else {
if (!$result = $conn->query("SELECT DISTINCT percentage FROM percents ORDER BY percentage")) {
echo "Syntax Error"; // $conn->error
} else {
$select_columns = ['invno'];
foreach ($result as $row) {
$percent = (int)$row['percentage'];
$select_columns[] = "SUM(CASE WHEN percentage = {$percent} THEN `percentage` ELSE 0 END) AS percentage_{$percent}";
}
if (!$result = $conn->query("SELECT " . implode(', ', $select_columns) . " FROM invoices GROUP BY invno ORDER BY invno")) {
echo "Syntax Error"; // $conn->error
} else {
echo "<table border=1>";
foreach ($result as $index => $row) {
if (!$index) {
echo '<tr><th>' , implode('</th><th>', array_keys($row)) , '</th></tr>';
}
echo '<tr><td>' , implode('</td><td>', $row) , '</td></tr>';
}
echo "</table>";
}
}
}
По сути, я запросил уникальные процентные значения из таблицы2, а затем использовал эти значения для динамического построения выражений SUM(CASE...))
в таблице1. Если это не совсем так, как вам требуется для ваших реальных данных проекта, пожалуйста, предоставьте лучшее / большее представление ваших данных БД, которое изолирует проблему, чтобы я мог обновить свой ответ.