【问题标题】:MySQL Query Return Indented Sub-ValuesMySQL 查询返回缩进的子值
【发布时间】:2018-07-17 20:39:43
【问题描述】:

我知道标题具有误导性和混淆性,但我无法弄清楚我需要做什么......

我目前有一个返回以下示例结果的 MySQL 查询: FirstQuery

|Invoice #|SO #|Customer|Invoice Date|Total|Sub-Invoice #|Part #|Line Item|Qty|
   34109    2    Fluke    2016-07-01  $988     34109        25    Cable     1
   34109    2    Fluke    2016-07-01  $988     34109        35    Relay     1
   34110    3    Fluke    2016-07-03  $215     34110        100   Cable     1
   34110    3    Fluke    2016-07-03  $215     34110        101   Relay     2
   34110    3    Fluke    2016-07-03  $215     34110        102   Remote    2
   34110    3    Fluke    2016-07-03  $215     34110        103   PCB Bd    1

但我希望查询不重复子发票编号开始的每个行值的前 6 列。我希望看到它返回如下内容: Preferred Query Output

|Invoice #|SO #|Customer|Invoice Date|Total|Sub-Invoice #|Part #|Line Item|Qty|
   34109    2    Fluke    2016-07-01  $988     34109        25    Cable     1
                                                            35    Relay     1
   34110    3    Fluke    2016-07-03  $215     34110        100   Cable     1
                                                            101   Relay     2
                                                            102   Remote    2
                                                            103   PCB Bd    1

这样,它就不会一遍又一遍地重复相同的不需要的信息,而只是将发票行项目分解成各自的行。这在 MySQL 中可能吗?我在 PHPmyAdmin 中做这一切

谢谢!

【问题讨论】:

  • 而不是发布图片(有些人看不到,例如,他们在我当前的网络上被阻止) - 你能用数据示例创建一个 sqlfiddle 吗?
  • 是的,将一些示例数据作为文本添加到您的问题或 sqlfiddle
  • “我目前有一个返回以下示例结果的 MySQL 查询”post de query..
  • 看起来你将需要你已经拥有的查询,将其用作子查询并在列 invoice_number 上进行透视,并在行描述上使用 GROUP_CONCAT。和订购数量。
  • 我不知道如何让 sqlfiddle 工作......

标签: php mysql sql wordpress csv


【解决方案1】:

给定

MariaDB [sandbox]> select * from docs;
+----+--------+--------+
| id | id_sub | id_obj |
+----+--------+--------+
|  1 |      1 |      1 |
|  2 |      1 |      2 |
|  3 |      1 |      3 |
|  4 |      1 |     10 |
|  5 |      1 |      1 |
|  6 |      1 |     10 |
|  7 |      1 |      3 |
|  8 |      1 |     10 |
|  9 |      1 |      1 |
| 10 |      2 |     30 |
| 11 |      2 |     10 |
| 12 |      2 |      1 |
| 13 |      2 |     10 |
| 14 |      4 |      1 |
| 15 |      5 |      1 |
| 16 |      6 |      1 |
| 17 |      7 |      1 |
| 18 |      7 |     10 |
| 19 |      7 |     11 |
+----+--------+--------+
19 rows in set (0.00 sec)

然后你可以使用变量检测 id_sub 的变化

select   if(id_sub <> @p, id_sub,'') id_sub,
         @p:=id_sub p
from docs cross join(select @p:='') p
order by id

结果

 +--------+---+
| id_sub | p |
+--------+---+
| 1      | 1 |
|        | 1 |
|        | 1 |
|        | 1 |
|        | 1 |
|        | 1 |
|        | 1 |
|        | 1 |
|        | 1 |
| 2      | 2 |
|        | 2 |
|        | 2 |
|        | 2 |
| 4      | 4 |
| 5      | 5 |
| 6      | 6 |
| 7      | 7 |
|        | 7 |
|        | 7 |
+--------+---+
19 rows in set (0.00 sec)

【讨论】:

  • 是否可以在运行 IF 语句的同时选择不止 1 个字段?
  • 阅读 concat。
猜你喜欢
  • 2014-09-27
  • 1970-01-01
  • 2019-03-21
  • 2014-02-15
  • 2016-04-20
  • 2014-01-18
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多