【问题标题】:How to get sum of same value and different value in same row?如何在同一行中获得相同值和不同值的总和?
【发布时间】:2019-09-17 04:03:34
【问题描述】:

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

表 2
id  百分比
1    18%
2    28%

表 2 percentage 列值应成为输出的列标题。

在表1中,invno1有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`

这很好,但我想动态获取百分比。

【问题讨论】:

  • 请给我这个输出的 mysql 查询先自己试试怎么样。
  • 你有多少百分比???只有两个或更多?
  • 我不知道怎么在这里提问。这是我第一次。所以请帮助我
  • 如果我理解您的任务,您将需要编写某种 JOIN(取决于您的需要),然后使用枢轴技术生成总和。这是一条线索...stackoverflow.com/a/51321042/2943403
  • 这个问题就目前而言很好,但正如所指出的那样 - 您应该尝试解决问题。到目前为止你写过代码吗?

标签: php mysql dynamic pivot


【解决方案1】:

今天早上吃了一碗麦片,我很快草拟了一个两步法,以动态方式生成您想要的输出。

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...)) 表达式。如果这不能完全按照您对实际项目数据的要求工作,请提供更好/更大的数据库数据表示形式,以隔离问题,以便我可以更新我的答案。

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2015-09-26
    • 1970-01-01
    相关资源
    最近更新 更多