簡體   English   中英

如何獲得同一行中相同值和不同值的總和?

[英]How to get sum of same value and different value in same row?

表格1
invno百分比成本
1 18% 18.00
1 18% 18.00
2 18% 18.00
2 28% 28.00

表2
身份證百分比
1 18%
2 28%

表 2 percentage列值應成為輸出的列標題。

在表 1 中, invno 1 有 2 個條目,但百分比值相同18% invno 2 有 2 個具有不同百分比值的條目。

輸出

invno    percentage 18%    percentage 28%
  1           36.00             0.00
  2           18.00            28.00

到目前為止,我已經寫了:

SELECT
    `invno`,
    SUM(CASE WHEN `percentage` = '18' THEN `percentage` ELSE NULL END) AS `percentage_18`,
    SUM(CASE WHEN `percentage` = '28' THEN `percentage` ELSE NULL END) AS `percentage_28`
FROM `table1`
GROUP BY `invno`
HAVING 18 IS NOT NULL AND 28 IS NOT NULL
ORDER BY `invno`

這很好,但我想動態獲取百分比。

今天早上吃了一碗麥片,我很快就制定了一個兩步法,以動態的方式產生你想要的輸出。

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>";
        }
    }
}

實際上,我從 table2 中查詢了唯一的百分比值,然后使用這些值在 table1 上動態構建SUM(CASE...))表達式。 如果這並不完全符合您對實際項目數據的要求,請提供更好/更大的數據庫數據表示,以隔離問題,以便我可以更新我的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM