请教高手(oracle 9i)
表1:投资类型表(部分数据)
tradeId tradeName parentTradeId
01 交易性金融资产
0101 股票 01
0102 基金 01表2:证券库存表(部分数据)
tradeId productId productName kcNum
0101 a01 工商银行 1000
0102 a02 广发聚丰 2000现需要生成如下样式的报表:
品种 库存数量
---------------------------
交易性金融资产 3000
股票 1000
工商银行 1000
基金 2000
广发聚丰 2000注:用函数返回结果集已经实现,但我现在希望能用一张视图解决,谢谢各位帮忙
表1:投资类型表(部分数据)
tradeId tradeName parentTradeId
01 交易性金融资产
0101 股票 01
0102 基金 01表2:证券库存表(部分数据)
tradeId productId productName kcNum
0101 a01 工商银行 1000
0102 a02 广发聚丰 2000现需要生成如下样式的报表:
品种 库存数量
---------------------------
交易性金融资产 3000
股票 1000
工商银行 1000
基金 2000
广发聚丰 2000注:用函数返回结果集已经实现,但我现在希望能用一张视图解决,谢谢各位帮忙
FROM (SELECT a.tradeid, '0000' tradeid_1, '000' productid, a.tradename,
bb.kcnum
FROM table1 a,
(SELECT a.parenttradeid, SUM (b.kcnum) kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid) bb
WHERE a.tradeid = bb.parenttradeid
UNION ALL
SELECT a.parenttradeid, a.tradeid, '000', a.tradename,
SUM (b.kcnum)
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid, a.tradeid
UNION ALL
SELECT a.parenttradeid, a.tradeid, b.productid, b.productname,
SUM (b.kcnum)
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid) aa
ORDER BY aa.parenttradeid, aa.tradeid, aa.productid
WITH table1 AS
(SELECT '01' tradeid, '交易性金融资产' tradename, '' parenttradeid
FROM DUAL
UNION ALL
SELECT '0101', '股票', '01'
FROM DUAL
UNION ALL
SELECT '0102', '基金', '01'
FROM DUAL),
table2 AS
(SELECT '0101' tradeid, 'a01' productid, '工商银行' productname,
1000 kcnum
FROM DUAL
UNION ALL
SELECT '0102', 'a02', '广发聚丰', 2000
FROM DUAL)
SELECT aa.tradename, aa.kcnum
FROM (SELECT a.tradeid, '0000' tradeid_1, '000' productid, a.tradename,
bb.kcnum
FROM table1 a,
(SELECT a.parenttradeid, SUM (b.kcnum) kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid) bb
WHERE a.tradeid = bb.parenttradeid
UNION ALL
SELECT a.parenttradeid, a.tradeid, '000', a.tradename,
SUM (b.kcnum)
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid, a.tradeid, a.tradename
UNION ALL
SELECT a.parenttradeid, a.tradeid, b.productid, b.productname,
b.kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid) aa
ORDER BY aa.tradeid, aa.tradeid_1, aa.productid
结果
Row# TRADENAME KCNUM1 交易性金融资产 3000
2 股票 1000
3 工商银行 1000
4 基金 2000
5 广发聚丰 2000
(SELECT '01' tradeid, '交易性金融资产' tradename, '' parenttradeid
FROM DUAL
UNION ALL
SELECT '0101', '股票', '01'
FROM DUAL
UNION ALL
SELECT '0102', '基金', '01'
FROM DUAL),
table2 AS
(SELECT '0101' tradeid, 'a01' productid, '工商银行' productname,
1000 kcnum
FROM DUAL
UNION ALL
SELECT '0102', 'a02', '广发聚丰', 2000
FROM DUAL)
SELECT aa.tradename, aa.kcnum
FROM (SELECT a.tradeid, '0000' tradeid_1, '000' productid, a.tradename,
bb.kcnum
FROM table1 a,
(SELECT a.parenttradeid, SUM (b.kcnum) kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid) bb
WHERE a.tradeid = bb.parenttradeid
UNION ALL
SELECT a.parenttradeid, a.tradeid, '000', ' '||a.tradename,
SUM (b.kcnum)
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid, a.tradeid, a.tradename
UNION ALL
SELECT a.parenttradeid, a.tradeid, b.productid, ' '||b.productname,
b.kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid) aa
ORDER BY aa.tradeid, aa.tradeid_1, aa.productid这个是各级子名字前加空格的
结果
Row# TRADENAME KCNUM1 交易性金融资产 3000
2 股票 1000
3 工商银行 1000
4 基金 2000
5 广发聚丰 2000
SELECT aa.tradename 品种, aa.kcnum 库存数量
FROM (SELECT a.tradeid, '0000' tradeid_1, '000' productid, a.tradename,
bb.kcnum
FROM table1 a,
(SELECT a.parenttradeid, SUM (b.kcnum) kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid) bb
WHERE a.tradeid = bb.parenttradeid
UNION ALL
SELECT a.parenttradeid, a.tradeid, '000', a.tradename,
SUM (b.kcnum)
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid, a.tradeid, a.tradename
UNION ALL
SELECT a.parenttradeid, a.tradeid, b.productid, b.productname,
b.kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid) aa
ORDER BY aa.tradeid, aa.tradeid_1, aa.productid子名字前加空格
SELECT aa.tradename 品种, aa.kcnum 库存数量
FROM (SELECT a.tradeid, '0000' tradeid_1, '000' productid, a.tradename,
bb.kcnum
FROM table1 a,
(SELECT a.parenttradeid, SUM (b.kcnum) kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid) bb
WHERE a.tradeid = bb.parenttradeid
UNION ALL
SELECT a.parenttradeid, a.tradeid, '000', ' '||a.tradename,
SUM (b.kcnum)
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid
GROUP BY a.parenttradeid, a.tradeid, a.tradename
UNION ALL
SELECT a.parenttradeid, a.tradeid, b.productid, ' '||b.productname,
b.kcnum
FROM table1 a, table2 b
WHERE a.tradeid = b.tradeid) aa
ORDER BY aa.tradeid, aa.tradeid_1, aa.productid