一条SQL语句能实现这个功能吗?

[复制链接]
查看11 | 回复8 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
三个表,大体如下:
CREATE TABLE "取引明細"(
"伝票番号"
CHAR(12) NOT NULL,
"伝票金額"BIGINT WITH DEFAULT0,
PRIMARY KEY ("伝票番号&quot

);
CREATE TABLE "入金入力"(
"入金番号"
CHAR(12) NOT NULL,
"伝票番号"
CHAR(12) NOT NULL,
"入金金額"BIGINT WITH DEFAULT0,
PRIMARY KEY ("入金番号&quot

);
CREATE TABLE "違算入力"(
"違算番号"
CHAR(12) NOT NULL,
"伝票番号"
CHAR(12) NOT NULL,
"違算金額"BIGINT WITH DEFAULT0,
PRIMARY KEY ("違算番号&quot

);
假设数据:
取引明細

伝票番号
伝票金額
100000000001
10,000
入金入力

入金番号
伝票番号
入金金額
000000000001
100000000001
21,105
000000000002
100000000001
22,155
000000000003
100000000001
23,205
違算入力

違算番号
伝票番号
違算金額
000000000001
100000000001
31,500
000000000002
100000000001
32,500
想要的结果:
伝票番号 伝票金額 入金番号 入金金額 違算番号 違算金額
100000000001 10,000 000000000001 21,105 000000000001 31,500
------------------- --------- 000000000002 22,155 000000000002 32,500
------------------- --------- 000000000003 23,205 ------------------- ---------
请问一条SQL文可以吗?
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
繁体看着晕
把结果按什么样的规则得到说清楚
估计一条应该没问题
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
最初由 lastwinner 发布
[B]繁体看着晕
把结果按什么样的规则得到说清楚
估计一条应该没问题 [/B]



对不起了,懒得改了直接copy过来了。
规则就是:
对于一张订单,可能有多条付款的单据和多条返款的单据。
然后要打印报表的内容是:
这张帐单的信息和相关付款、返款单据的信息。
报表的样式是:(假设只有一条订单,对应有3条付款单据和2条返款单据)
订单信息 付款信息 返款信息
---- 付款信息 返款信息
---- 付款信息 ----


 这回明白了吗?
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
我想大概是这个意思吧
T_BASE - 取引明細
T_IN - 入金入力
T_OUT - 違算入力
[php]
SQL> SELECT * FROM T_BASE;
BID
BMONEY
------------ -----------
10000000000110000.00
10000000000210000.00
SQL> SELECT * FROM T_IN;
IID
BID
IMONEY
------------ ------------ -----------
000000000001 10000000000121105.00
000000000002 10000000000122155.00
000000000003 10000000000123205.00
000000000004 10000000000231500.00
000000000005 10000000000232500.00
SQL> SELECT * FROM T_OUT;
OID
BID
OMONEY
------------ ------------ -----------
000000000001 10000000000131500.00
000000000002 10000000000132500.00
000000000003 10000000000221105.00
000000000004 10000000000222155.00
000000000005 10000000000223205.00
SQL>
SQL> SELECT B.BID, B.BMONEY, I.IID, I.IMONEY, O.OID, O.OMONEY
2FROM (SELECT B.BID, B.BMONEY,
3
ROW_NUMBER() OVER(PARTITION BY OI.BID ORDER BY 1) AS RN
4
FROM T_BASE B,
5
(SELECT BID
6
FROM T_IN
7
UNION ALL
8
SELECT BID FROM T_OUT) OI
9 WHERE B.BID = OI.BID) B,
10 (SELECT BID, IID, IMONEY,
11
ROW_NUMBER() OVER(PARTITION BY BID ORDER BY IID) AS RN
12
FROM T_IN) I,
13 (SELECT BID, OID, OMONEY,
14
ROW_NUMBER() OVER(PARTITION BY BID ORDER BY OID) AS RN
15
FROM T_OUT) O
16 WHERE B.BID = I.BID(+)
17 AND B.BID = O.BID(+)
18 AND B.RN = I.RN(+)
19 AND B.RN = O.RN(+)
20 AND COALESCE(IID, OID) IS NOT NULL
21/
BID
BMONEY IID
IMONEY OID
OMONEY
------------ ----------- ------------ ----------- ------------ -----------
10000000000110000.00 00000000000121105.00 00000000000131500.00
10000000000110000.00 00000000000222155.00 00000000000232500.00
10000000000110000.00 00000000000323205.00

10000000000210000.00 00000000000431500.00 00000000000321105.00
10000000000210000.00 00000000000532500.00 00000000000422155.00
10000000000210000.00
00000000000523205.00

-------------------------
[/php]
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
如果一个订单信息对应的付款信息或返款信息不会太多的话
这样也可以
下面的sql是处理
一个订单信息对应的付款信息或返款信息不会多于10条的情况
[php]
SQL> SELECT B.BID, B.BMONEY, I.IID, I.IMONEY, O.OID, O.OMONEY
2FROM (SELECT BID, BMONEY, RN
3
FROM T_BASE B,
4
(SELECT ROWNUM AS RN FROM DUAL CONNECT BY LEVEL/
BID
BMONEY IID
IMONEY OID
OMONEY
---------------- ---------- ---------------- ---------- ---------------- ----------
100000000001
10000 000000000001
21105 000000000001
31500
100000000001
10000 000000000002
22155 000000000002
32500
100000000001
10000 000000000003
23205
100000000002
10000 000000000004
31500 000000000003
21105
100000000002
10000 000000000005
32500 000000000004
22155
100000000002
10000
000000000005
23205
已选择6行。
--
[/php]
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
谢谢两位大虾的指教,呵呵,不知道在DB2下能不能成。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
我怎麼覺得不是繁體,而是小日本的。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
最初由 flowerbird 发布
[B]我怎麼覺得不是繁體,而是小日本的。 [/B]



还是你厉害,一下就看穿了。
确实是小日本的一个项目。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
你的名字都有小日本的味道的。呵呵。不要作漢姦哦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行