如何用SQL实现如下功能。(SQL高手进,在线等)
select 病人id,rownum-1 as 序号,row2 as 序号2,收据费目||':'||ltrim(TO_CHAR(金额),'999990.00')||'┊' as 信息行
from
(select 病人id,rownum as row2,收据费目,Sum(实收金额) as 金额
from 病人费用记录
where 登记时间 between sysdate-9 and sysdate-8
group by 病人id,rownum,收据费目
having Sum(实收金额)<>0) A
----------------------------------------------------------------------------------------
以上为请教的源数据.
得到的格式为:
病人ID 序号 序号2 信息行
1 60 0 458 西药费:412┊
2 60 1 459 西药费:105┊
3 60 2 547 化验费:1.5┊
4 60 3 548 化验费:4┊
5 60 4 1237 治疗费:1┊
6 60 5 1238 治疗费:8┊
7 60 6 1239 材料费:2┊
8 60 7 1240 材料费:2┊
9 60 8 1241 材料费:2┊
10 60 9 1242 材料费:10┊
11 60 10 1243 治疗费:4┊
12 60 11 1244 材料费:2┊
13 60 12 1245 材料费:1┊
14 60 13 1423 西药费:1┊
15 60 14 1424 西药费:83┊
16 60 15 1425 西药费:86┊
17 60 16 1426 西药费:3┊
18 60 17 1427 西药费:7┊
19 64 18 82 床位费:1.5┊
20 72 19 1169 治疗费:16┊
21 72 20 1170 材料费:2┊
22 72 21 1171 材料费:2┊
23 72 22 1172 治疗费:4┊
24 72 23 1173 材料费:2┊
25 72 24 1174 材料费:1┊
26 78 25 1182 治疗费:1┊
27 78 26 1183 材料费:2┊
28 78 27 1184 材料费:2┊
------------------------------------
希望得到的格式为
病人ID 序号 序号2 信息行
1 60 0 0 西药费:412┊
2 60 1 1 西药费:105┊
3 60 2 2 化验费:1.5┊
4 60 3 3 化验费:4┊
5 60 4 4 治疗费:1┊
6 60 5 5 治疗费:8┊
7 60 6 6 材料费:2┊
8 60 7 7 材料费:2┊
9 60 8 8 材料费:2┊
10 60 9 9 材料费:10┊
11 60 10 10 治疗费:4┊
12 60 11 11 材料费:2┊
13 60 12 12 材料费:1┊
14 60 13 13 西药费:1┊
15 60 14 14 西药费:83┊
16 60 15 15 西药费:86┊
17 60 16 16 西药费:3┊
18 60 17 17 西药费:7┊
19 64 18 0 床位费:1.5┊
20 72 19 0 治疗费:16┊
21 72 20 1 材料费:2┊
22 72 21 2 材料费:2┊
23 72 22 3 治疗费:4┊
24 72 23 4 材料费:2┊
25 72 24 5 材料费:1┊
26 78 25 0 治疗费:1┊
27 78 26 1 材料费:2┊
28 78 27 2 材料费:2┊
原来的数据的 序号2 列为 a 表的rownum
需要将序号2 列变成统计单个病人的费用的 rownum 值.
比如一个病人被选择出了 5 行, 序号2的值就从 0-4递增.
我试了很多方法都不好实现,可能由于自己底子太浅吧.
希望能有高手相助!
这是下表的一段数据源,看看表的格式不好实现,就知道我为什么问这个问题了.
(为了解释清楚点,不得不列了很多)