请教稠化查询~~~~
时间:2011-09-13
来源:互联网
参看了帖子:http://www.itpub.net/thread-1332059-1-1.html
上面是我想要结果,问题:如果表m中没有检索出结果,要得到下面的结果,怎么写呢? 谢谢~~~
[Copy to clipboard] [ - ]
CODE:
WITH t1 AS (
SELECT 'a' tid, 'aa' tname FROM DUAL UNION ALL
SELECT 'b' tid, 'bb' tname FROM DUAL UNION ALL
SELECT 'c' tid, 'cc' tname FROM DUAL
),t2 AS (
SELECT 'a' tid, 1 total FROM DUAL UNION ALL
SELECT 'a' tid, 2 total FROM DUAL UNION ALL
SELECT 'a' tid, 3 total FROM DUAL UNION ALL
SELECT 'b' tid, 1 total FROM DUAL UNION ALL
SELECT 'b' tid, 2 total FROM DUAL
)
SELECT t1.*,
nvl(m.total,0) total
FROM t1
LEFT JOIN (
SELECT t2.tid,
SUM(t2.total) total
FROM t2
WHERE 1=1
GROUP BY t2.tid
) m PARTITION BY(m.tid) ON t1.tid = m.tid
TID TNAME TOTAL
--- ----- ----------
a aa 6
b bb 3
c cc 0
SELECT 'a' tid, 'aa' tname FROM DUAL UNION ALL
SELECT 'b' tid, 'bb' tname FROM DUAL UNION ALL
SELECT 'c' tid, 'cc' tname FROM DUAL
),t2 AS (
SELECT 'a' tid, 1 total FROM DUAL UNION ALL
SELECT 'a' tid, 2 total FROM DUAL UNION ALL
SELECT 'a' tid, 3 total FROM DUAL UNION ALL
SELECT 'b' tid, 1 total FROM DUAL UNION ALL
SELECT 'b' tid, 2 total FROM DUAL
)
SELECT t1.*,
nvl(m.total,0) total
FROM t1
LEFT JOIN (
SELECT t2.tid,
SUM(t2.total) total
FROM t2
WHERE 1=1
GROUP BY t2.tid
) m PARTITION BY(m.tid) ON t1.tid = m.tid
TID TNAME TOTAL
--- ----- ----------
a aa 6
b bb 3
c cc 0
上面是我想要结果,问题:如果表m中没有检索出结果,要得到下面的结果,怎么写呢? 谢谢~~~
[Copy to clipboard] [ - ]
CODE:
TID TNAME TOTAL
--- ----- ----------
a aa 0
b bb 0
c cc 0
--- ----- ----------
a aa 0
b bb 0
c cc 0
作者: hudingchen 发布时间: 2011-09-13
没有看明白,到底是什么意思?
作者: bell6248 发布时间: 2011-09-13
QUOTE:原帖由 bell6248 于 2011-9-13 17:05 发表
没有看明白,到底是什么意思?
没有看明白,到底是什么意思?
WITH t1 AS (
SELECT 'a' tid, 'aa' tname FROM DUAL UNION ALL
SELECT 'b' tid, 'bb' tname FROM DUAL UNION ALL
SELECT 'c' tid, 'cc' tname FROM DUAL
),t2 AS (
SELECT 'a' tid, 1 total FROM DUAL UNION ALL
SELECT 'a' tid, 2 total FROM DUAL UNION ALL
SELECT 'a' tid, 3 total FROM DUAL UNION ALL
SELECT 'b' tid, 1 total FROM DUAL UNION ALL
SELECT 'b' tid, 2 total FROM DUAL
)
SELECT t1.*,
nvl(m.total,0) total
FROM t1
LEFT JOIN (
SELECT t2.tid,
SUM(t2.total) total
FROM t2
WHERE 1=2
GROUP BY t2.tid
) m PARTITION BY(m.tid) ON t1.tid = m.tid
上面的m中是没有数据的,如果用LEFT JOIN PARTITION BY的写法,会检索不出数据,想得到下面的结果
[Copy to clipboard] [ - ]
CODE:
TID TNAME TOTAL
--- ----- ----------
a aa 0
b bb 0
c cc 0
--- ----- ----------
a aa 0
b bb 0
c cc 0
[ 本帖最后由 hudingchen 于 2011-9-13 17:14 编辑 ]
作者: hudingchen 发布时间: 2011-09-13
QUOTE:原帖由 hudingchen 于 2011-9-13 17:11 发表
WITH t1 AS (
SELECT 'a' tid, 'aa' tname FROM DUAL UNION ALL
SELECT 'b' tid, 'bb' tname FROM DUAL UNION ALL
SELECT 'c' tid, 'cc' tname FROM DUAL
),t2 AS (
SELECT 'a' tid, 1 total FROM DUAL UNION ALL
SELECT 'a' tid, 2 total FROM DUAL UNION ALL
SELECT 'a' tid, 3 total FROM DUAL UNION ALL
SELECT 'b' tid, 1 total FROM DUAL UNION ALL
SELECT 'b' tid, 2 total FROM DUAL
)
SELECT t1.*,
nvl(m.total,0) total
FROM t1
LEFT JOIN (
SELECT t2.tid,
SUM(t2.total) total
FROM t2
WHERE 1=2
GROUP BY t2.tid
) m PARTITION BY(m.tid) ON t1.tid = m.tid
上面的m中是没有数据的,如果用LEFT JOIN PARTITION BY的写法,会检索不出数据,想得到下面的结果
TID TNAME TOTAL
--- ----- ----------
a aa 0
b bb 0
c cc 0
WITH t1 AS (
SELECT 'a' tid, 'aa' tname FROM DUAL UNION ALL
SELECT 'b' tid, 'bb' tname FROM DUAL UNION ALL
SELECT 'c' tid, 'cc' tname FROM DUAL
),t2 AS (
SELECT 'a' tid, 1 total FROM DUAL UNION ALL
SELECT 'a' tid, 2 total FROM DUAL UNION ALL
SELECT 'a' tid, 3 total FROM DUAL UNION ALL
SELECT 'b' tid, 1 total FROM DUAL UNION ALL
SELECT 'b' tid, 2 total FROM DUAL
)
SELECT t1.*,
nvl(m.total,0) total
FROM t1
LEFT JOIN (
SELECT t2.tid,
SUM(t2.total) total
FROM t2
WHERE 1=2
GROUP BY t2.tid
) m PARTITION BY(m.tid) ON t1.tid = m.tid
上面的m中是没有数据的,如果用LEFT JOIN PARTITION BY的写法,会检索不出数据,想得到下面的结果
TID TNAME TOTAL
--- ----- ----------
a aa 0
b bb 0
c cc 0
为什么一定要用LEFT JOIN PARTITION BY的写法呢, 你的代码改改不就可以了, 使用LEFT JOIN PARTITION BY只是10g开始提供一种方便的写法而已, 没有什么特别的!
SQL> WITH t1 AS (
2 SELECT 'a' tid, 'aa' tname FROM DUAL UNION ALL
3 SELECT 'b' tid, 'bb' tname FROM DUAL UNION ALL
4 SELECT 'c' tid, 'cc' tname FROM DUAL
5 ),t2 AS (
6 SELECT 'a' tid, 1 total FROM DUAL UNION ALL
7 SELECT 'a' tid, 2 total FROM DUAL UNION ALL
8 SELECT 'a' tid, 3 total FROM DUAL UNION ALL
9 SELECT 'b' tid, 1 total FROM DUAL UNION ALL
10 SELECT 'b' tid, 2 total FROM DUAL
11 )
12 SELECT t1.*,
13 nvl(m.total,0) total
14 FROM t1
15 LEFT JOIN (
16 SELECT t2.tid,
17 SUM(t2.total) total
18 FROM t2
19 WHERE 1=2
20 GROUP BY t2.tid
21 ) m ON t1.tid = m.tid
22 /
TID TNAME TOTAL
--- ----- ----------
b bb 0
c cc 0
a aa 0
SQL>
作者: bell6248 发布时间: 2011-09-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28