我正在尝试将多行组合成不同列的单行,但它给出了不同的方式。我的数据就是这样。
表1:
aScrollView.delegate = someExample
bScrollView.delegate = someExample
表2:
| id | name | Invoice value | invoice_date |
|----|------|---------------|--------------|
| 1 | A | 5000 | 30-01-2016 |
| 2 | B | 8000 | 02-05-2016 |
| 3 | C | 10000 | 03-05-2016 |
并且所需的输出应如下所示
| 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% |
这是我的查询,但它的给出结果用逗号分隔的duedates.i dnt wnat就是这样。
| 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 |
请一些人帮我解决。
答案 0 :(得分:1)
不要在没有高级知识的情况下在一个声明中尝试解决这个问题。 制作一个脚本并将其拆分为几个步骤。如果你做得对,它会很快运行(通常比单一查询方法更快)。
步骤可能是:
创建表3,表2富含表1中的数据,按名称和due_date排序 通过添加一个auto_increment列和一个Unique Key的一部分以及名称,添加一列来为每个名称的出现次数编号:
ALTER TABLE TABLE_3
ADD COLUMN position_id integer auto_increment NOT NULL,
ADD Unique Key positon_number(Name, position_id);
之后,您可以使用position_id来引用第一个,第二个等事件以及相关的duedate和dueamount:
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而不是名称,因为否则你必须注意重复的名称。