【问题标题】:How to add headers in MySQL above sets of data如何在 MySQL 中在数据集上方添加标头
【发布时间】:2021-04-28 19:04:24
【问题描述】:

标题可能是错误的词,但如果我有一张工作班次表和一张客户表,我试图弄清楚如何选择一行来显示客户之间的客户信息。

[移位表] shift_id、customer_id、日期

[Shift_Needs_Workers] id, shift_id, people_id (nullable = true)

[客户] customer_id, customer_name

客户可以有多个班次,并且班次可以需要多个工人 我想运行一个可以输出的SELECT语句

Customer A
Shift 1, Worker 1
Shift 1, Worker 2
Shift 2, Worker 1
Shift 2, Worker 2
Shift 2, Worker 3
Customer B
Shift 1, Worker 1
Shift 2, Worker 2
etc

我研究了汇总,但似乎需要一些东西来分组,而我恰恰相反,我想要所有行,但又想要一个额外的行。我查看了 Union,但它看起来像是一个额外的查询或多个单独的查询,我想在 customer_id 更改的查询中间“联合”。

任何可能有帮助的帮助或其他链接都很棒。

【问题讨论】:

  • 这在应用程序编程语言中做得更好,而不是数据库。
  • @Barmar,您对我可以指向我们的 MySQL 服务器并让我们的开发团队以外的其他人能够制作此类报告的报告生成器有什么建议吗?我同意你的观点,我已经使用 PHP 和直接 sql 构建了许多报告,但我需要为公司提供更多的可扩展性。
  • 不,抱歉,我使用 PHP 进行所有开发,而不是报告构建器。

标签: mysql mariadb


【解决方案1】:

您可以使用 jasper 报告构建您的报告。您将为客户创建一个主报表,并为轮班信息创建一个子报表。

如果你想在一个语句中做到这一点,你首先必须生成一个这样的结构

CustomerA, null, null, 0
CustomerA, Shift1, Worker1, 1
CustomerA, Shift1, Worker2, 1
CustomerB, null, null, 0

最后一列是信息的级别。 拥有此结构后,您可以使用联合和连接轻松生成 您可以生成带有 case 或 if then else 的输出列

case levelNr when 0 then customer_name else concat(shift_id, ' ', worker_id) end 

【讨论】:

  • 谢谢!!我刚刚研究了 Jasper,并认为这绝对是我想要走的路。对于 OP 问题,我正在努力使用特定的连接和联合。我不确定如何在每个客户之间使用“null,null,0”部分构建数据。是否有一个我不知道使用 union 语句的 mysql foreach 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2017-02-19
  • 2018-05-05
  • 2019-02-16
  • 2022-01-19
相关资源
最近更新 更多