【问题标题】:How do I merge row that has the same value and total value with mysql query?如何将具有相同值和总值的行与 mysql 查询合并?
【发布时间】:2019-01-18 01:10:14
【问题描述】:

我的查询 sql 是这样的:

SELECT a.transaction_number a.date, a.item_number, b.desc, a.variant_code, sum(a.quantity) AS total_qty, a.cost
FROM `items_details` AS a
JOIN `items` AS b ON b.id = a.item_number
WHERE a.item_number = 0101010
GROUP BY a.variant_code
ORDER BY transaction_number, variant_code

结果如下:

我想让桌子变成这样:

我该怎么做?

【问题讨论】:

  • 您应该在应用层执行此操作。虽然在 SQL 中可能,但这种重新格式化在其他工具中更合适。
  • 任何时候你有一个 GROUP BY 子句,但没有聚合函数,你可以确定某个地方出了问题!
  • 分组依据无效。不会在较新的 MySQL 版本上执行(除非在兼容模式下),可能会在较旧的 MySQL 版本上返回不可预测的结果。一般的 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须要么标识一个分组列,要么是一个集合函数的参数!
  • @Gordon Linoff 我使用 Laravel 框架。我希望从 sql 中处理这个问题,以便分页可以正常运行
  • @Strawberry 我更新了我的问题。所以现在存在sum

标签: mysql sql join merge group-by


【解决方案1】:

只是为了好玩......

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(colA INT NOT NULL
,colB INT NOT NULL
,colC INT NOT NULL
,PRIMARY KEY(colA,colB,colC)
);

INSERT INTO my_table VALUES
(101,1001,31),
(101,1002,14),
(102,1001,15),
(102,1001,92),
(102,1002,65),
(103,1001,35),
(103,1002,89);

SELECT CASE WHEN @prevA=colA THEN '' ELSE colA END colA
     , CASE WHEN @prevB=colB THEN '' ELSE colB END colB
     , colC
     , @prevA:=colA
     , @prevB:=colB
  FROM my_table x
     , (SELECT @prevA:=null,@prevB:=null) vars
 ORDER
    BY x.colA, x.colB;

+------+------+------+--------------+--------------+
| colA | colB | colC | @prevA:=colA | @prevB:=colB |
+------+------+------+--------------+--------------+
| 101  | 1001 |   31 |          101 |         1001 |
|      | 1002 |   14 |          101 |         1002 |
| 102  | 1001 |   15 |          102 |         1001 |
|      |      |   92 |          102 |         1001 |
|      | 1002 |   65 |          102 |         1002 |
| 103  | 1001 |   35 |          103 |         1001 |
|      | 1002 |   89 |          103 |         1002 |
+------+------+------+--------------+--------------+

【讨论】:

  • 太棒了。非常感谢
  • 也许你能再次帮助我。看看这个:stackoverflow.com/questions/51832979/…
  • 您确实需要熟悉某种表示层。这些都是显示问题,因此在应用程序代码中解决起来很简单
  • 如果我知道解决方案,我不会问
  • 嗯,PHP 与 mysql 结合使用很普遍,所以不妨看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2021-07-13
  • 2020-11-16
  • 1970-01-01
  • 2020-01-19
  • 2015-11-14
相关资源
最近更新 更多