sqlite从列中选择数据并作为行插入到另一个表中

时间:2016-11-09 00:08:37

标签: sqlite

我在表(病人)中的(sqlite db)中有条目,包含(id,nom,pnom,ddn,date,bilan,ordonnance)

e.g。 1行结构:

<table border="1">
  <tr>
    <td>id</td><td>nom</td><td>pnom</td><td>ddn</td><td>date</td><td>bilan</td><td>ordonnance</td>
    </tr>
  <tr>
  <td>1</td><td>Someone</td><td>Someone</td><td>12/12/1992</td><td>12/01/2016</td><td>?12/01/2016!dat goes here?15/01/2016!dat goes here?nn/nn/nnnn!nnn goes here</td><td>?12/01/2016!dat goes here?15/01/2016!dat goes here?nn/nn/nnnn!nnn goes here</td>
  </tr>
</table>

我创建了两个表“bilan”和“ordonnance”,它们都包含

id, pid, date, data

使用sql可以:

select id, bilan from patient

然后

insert into bilan (pid, date, data) Values (patient.id, '12/01/2016', 'dat goes here');
insert into bilan (pid, date, data) Values (patient.id, '15/01/2016', 'dat goes here');
insert into bilan (pid, date, data) Values (patient.id, 'nn/nn/nnnn', 'nnn goes here');

与“ordonnance”相同的事情

2 个答案:

答案 0 :(得分:0)

我没有SQLlite来测试它,它改编自this answer

PUB.movement

答案 1 :(得分:0)

问题可能并不清楚。 例如,这是一个列的例子:&#34; bilan&#34;来自id:&#34; 17&#34;在表格&#34;患者&#34;

2014年8月1日0 |?!1 | 0 | 1 | 0 | 0 2015年4月3日1 |?!1 | 1 | 1 | 1 |?!0 24/11/2016 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0

在表bilan中,想要的结果是那三行:

id:1 pid:17 日期:2014年1月8日 数据:0 | 1 | 0 | 1 | 0 | 0

id:2 pid:17 日期:04/03/2015 数据:1 | 1 | 1 | 1 | 1 | 0

id:3 pid:17 日期:2016年11月24日 data:0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0

我在申请中的插入声明是:

"UPDATE patient SET bilan = ifnull(bilan || '?" + today_  +"!" +$s+"', '?" + today_  +"!" +$s+"') WHERE ID="+oCurrent.id;

我做了这个解决方案:

Update patient set bilan=bilan|| '?' where bilan is not null; 

然后:

--steps from here to be repeated untill all bilan are null
insert into bilan ( pid, date, data )
SELECT id, 
substr(bilan,  instr(bilan, '?')+1 , instr(bilan, '!') -2),
substr(
    substr(bilan, instr(bilan, '!')+1),
    1,
    instr(  substr(bilan, instr(bilan, '!')+1), '?')-1
    )
FROM patient where bilan is not null;

--next
Update patient
set bilan = substr(
    substr(bilan,  instr(bilan, '?')+1),
    instr(substr(bilan,  instr(bilan, '?')+1), '?')
    )
where bilan is not null;
--next
Update patient set bilan = NULL where bilan ='?';
--end