求一条SQL 语句

kanebluba 2014-12-19 01:41:44
A 表
ID 月份 金额
123 01 100
123 02 200
123 03 400
321 12 200

B 表

月份
01
02
03
04
05
06
07
08
09
10
11
12

怎么得出 C 表

ID 月份 金额
123 01 100
123 02 200
123 03 400
123 04 0
123 05 0
123 06 0
123 07 0
123 08 0
123 09 0
123 10 0
123 11 0
123 12 0
321 01 0
321 02 0
321 03 0
321 04 0
321 05 0
321 06 0
321 07 0
321 08 0
321 09 0
321 10 0
321 11 0
321 12 0

321 01 0











...全文
179 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kanebluba 2014-12-19
  • 打赏
  • 举报
回复
OK, 谢楼上的。结贴了
bw555 2014-12-19
  • 打赏
  • 举报
回复
测试结果
SQL> WITH A AS (
  2  SELECT 123 ID,'01' 月份,100 金额 FROM DUAL UNION ALL
  3  SELECT 123 ID,'02' 月份,200 金额 FROM DUAL UNION ALL
  4  SELECT 123 ID,'03' 月份,400 金额 FROM DUAL UNION ALL
  5  SELECT 321 ID,'12' 月份,200 金额 FROM DUAL
  6  ),B AS (
  7  SELECT 01 月份 FROM DUAL UNION ALL
  8  SELECT 02 月份 FROM DUAL UNION ALL
  9  SELECT 03 月份 FROM DUAL UNION ALL
 10  SELECT 04 月份 FROM DUAL UNION ALL
 11  SELECT 05 月份 FROM DUAL UNION ALL
 12  SELECT 06 月份 FROM DUAL UNION ALL
 13  SELECT 07 月份 FROM DUAL UNION ALL
 14  SELECT 08 月份 FROM DUAL UNION ALL
 15  SELECT 09 月份 FROM DUAL UNION ALL
 16  SELECT 10 月份 FROM DUAL UNION ALL
 17  SELECT 11 月份 FROM DUAL UNION ALL
 18  SELECT 12 月份 FROM DUAL
 19  )
 20  SELECT T.ID,B.月份,nvl(A.金额,0) 金额
 21  FROM (
 22  select distinct ID from A) T JOIN B
 23  ON 1=1
 24  LEFT JOIN A
 25  ON T.ID=A.ID AND  B.月份=A.月份
 26  order by T.ID,B.月份;

        ID       月份       金额
---------- ---------- ----------
       123          1        100
       123          2        200
       123          3        400
       123          4          0
       123          5          0
       123          6          0
       123          7          0
       123          8          0
       123          9          0
       123         10          0
       123         11          0

        ID       月份       金额
---------- ---------- ----------
       123         12          0
       321          1          0
       321          2          0
       321          3          0
       321          4          0
       321          5          0
       321          6          0
       321          7          0
       321          8          0
       321          9          0
       321         10          0

        ID       月份       金额
---------- ---------- ----------
       321         11          0
       321         12        200

已选择24行。

SQL>
kanebluba 2014-12-19
  • 打赏
  • 举报
回复
伪代码吧? T JOIN B 后面又LEFT JOIN A?
bw555 2014-12-19
  • 打赏
  • 举报
回复
SELECT T.ID,B.月份,nvl(A.金额,0) 金额
FROM (
select distinct ID from A) T JOIN B
LEFT JOIN A
ON T.ID=A.ID AND  B.月份=A.月份
kanebluba 2014-12-19
  • 打赏
  • 举报
回复
怎么得出C 表 ID 月份 金额 123 01 100 123 02 200 123 03 400 123 04 0 123 05 0 123 06 0 123 07 0 123 08 0 123 09 0 123 10 0 123 11 0 123 12 0 321 01 0 321 02 0 321 03 0 321 04 0 321 05 0 321 06 0 321 07 0 321 08 0 321 09 0 321 10 0 321 11 0 321 12 200

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧