gpt4 book ai didi

mysql/pivot 表有两个表

转载 作者:行者123 更新时间:2023-11-29 11:30:18 24 4
gpt4 key购买 nike

我试图将多行合并为具有不同列的单行,但它给出了不同的方式。这是我的数据。

表1:

| id | name | Invoice value | invoice_date |
|----|------|---------------|--------------|
| 1 | A | 5000 | 30-01-2016 |
| 2 | B | 8000 | 02-05-2016 |
| 3 | C | 10000 | 03-05-2016 |

表2:

| id | invoice_id | duedate    | amount | percentage |
|----|------------|------------|--------|------------|
| 1 | 1 | 15-01-2016 | 2500 | 50% |
| 2 | 1 | 30-01-2016 | 2500 | 50% |
| 3 | 2 | 15-02-2016 | 8000 | 100% |
| 4 | 3 | 15-05-2016 | 5000 | 50% |
| 5 | 3 | 19-05-2016 | 2500 | 25% |
| 6 | 3 | 25-05-2016 | 2500 | 25% |

所需的输出应如下所示

| name | invoice_value | invoice_date | due date1  | due amount1 | due date2  | due amount2 | due date3  | due amount3 |
|------|---------------|--------------|------------|-------------|------------|-------------|------------|-------------|
| A | 5000 | 30-01-2016 | 15-01-2016 | 2500 | 30-01-2016 | 04-11-1906 | null | null |
| B | 8000 | 02-05-2016 | 15-02-2016 | 8000 | null | null | null | null |
| C | 10000 | 03-05-2016 | 15-05-2016 | 5000 | 19-05-2016 | 2500 | 19-05-2016 | 2500 |

这是我的查询,但它给出的结果是用逗号分隔的 duedates.i dnt wnat 这样的。

    SELECT 
T1.name,
T1.invoice_value,
T1.invoice_date,
T1.duedate,
T1.dueamount
FROM
(SELECT
table1.name,
table1.invoice_value,
table1.invoice_date,
GROUP_CONCAT(table2.duedate1) AS duedate,
GROUP_CONCAT(table2.dueamount1) AS dueamount
FROM
table1
LEFT JOIN table2 ON table1.id = table2.invoice_id) T1
GROUP BY T1.id

请有人帮我解决这个问题。

最佳答案

在没有高级知识的情况下,不要试图用一个语句来解决这个问题。制作一个脚本并将其分为几个步骤。如果你做得正确的话,它会运行得非常快(通常比单查询方法更快)。

步骤可能是:

创建表 3,该表是表 2,其中添加了表 1 中的数据,并按名称和 due_date 进行排序。
添加一列,通过添加一个 auto_increment 列以及与名称一起作为唯一键的一部分来对每个名称的出现次数进行编号:

ALTER TABLE TABLE_3
ADD COLUMN position_id integer auto_increment NOT NULL,
ADD Unique Key positon_number(Name, position_id);

之后您可以使用position_id来引用第一次、第二次等发生以及相关的到期日期和到期金额:

select
name, invoice_value, invoice_date, #

if(position_id=1, duedate ,null) as due_date_1,
if(position_id=1, amount ,null) as due_amount_1,

if(position_id=2, duedate ,null) as due_date_2,
if(position_id=2, amount ,null) as due_amount_2,

if(position_id=3, duedate ,null) as due_date_3,
if(position_id=3, amount ,null) as due_amount_3,

if(position_id=4, duedate ,null) as due_date_4,
if(position_id=4, amount ,null) as due_amount_4,

if(position_id=5, duedate ,null) as due_date_5,
if(position_id=5, amount ,null) as due_amount_5

FROM table_3
GROUP BY name;

但是,最好使用客户 ID 而不是名称,因为否则您将不得不查找重复的名称。

关于mysql/pivot 表有两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com