求一个问题的解决方案

xu54647265 2009-11-06 05:10:15
小弟现在有3张表分别是:
TABLE_1
CORP DATA_TYPE VALUE
A 本月数 XXXXX
A 本年累计 XXXXX

TABLE_2
DATA_TYPE
本月数
本年累计

TABLE_3
CORP
A
B

现在希望,当TABLE_1.CORP='A'时,结果:
CORP DATA_TYPE VALUE
A 本月数 XXXX
A 本年累计 XXXX
当TABLE_1.CORP='B'时,结果:
CORP DATA_TYPE VALUE
B 本月数 0
B 本年累计 0
如何写SQL?
...全文
67 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xu54647265 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
left join

SQL codeselect a.CORP,b.DATA_TYPE,b.VALUEfrom TABLE_3 aleftjoin TABLE_1on a.CORP=b.CORP
[/Quote]
这种方法,其实我研究过了。
如果这样写的话,原理是,先对表组装,后筛选,其过程相当于
在下表中,查找CORP=‘B’的数据
CORP DATA_TYPE VALUE
A 本月数 XXXX
A 本年累计 XXXX
但是,如果我们能先对表TABLE_1筛选,再组装,其过程相当于
将表
CORP DATA_TYPE VALUE
NULL(或者0) NULL(或者0) NULL(或者0)
和表
CORP
A
B
进行组装
搞出来的结果才是我想要的
但是这样,SQL成了这样的了
SELECT A.CORP,B.DATA_TYPE,A.VALUE
FROM (SELECT * FROM TABLE_1 WHERE CORP = 'B') A RIGHT JOIN TABLE_2 B ON A.DATA_TYPE = B.DATA_TYPE
其中的子查询中,CORP = ‘B’成了动态的条件部分
我个人,不知道在开发报表的整体过程中,有任何技术能提供这样的功能
xu54647265 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwa 的回复:]
SELECT CORP,DATA_TYPE,SUM([VALUE]) FROM (
select A.*,C.*,0 AS [VALUE]
from TABLE_3 a ,TABLE_2 C
UNION
SELECT * FROM TABLE_1)
GROUP BY
CORP,DATA_TYPE
WHERE CORP='B'
[/Quote]
这个方法太投机取巧了。
一是会产生冗余数据
二是,这3张表只是个例子,比较理想化。实际上有可能关联的维度很多,不止2个维度,算上上面的那个缺点,维度越多,冗余数据越多。
能不能搞出一个能动态的在前台做手脚的方法?
xu54647265 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
left join

SQL codeselect a.CORP,b.DATA_TYPE,b.VALUEfrom TABLE_3 aleftjoin TABLE_1on a.CORP=b.CORP
[/Quote]
LEFT JOIN是不好使的
LEFT JOIN 只能保证在查到数据的情况下,左表的完整
如果查不到数据的话,是不能保证左表完整的
song0511 2009-11-06
  • 打赏
  • 举报
回复
学习
ACMAIN_CHM 2009-11-06
  • 打赏
  • 举报
回复
left join

select a.CORP,b.DATA_TYPE,b.VALUE
from TABLE_3 a left join TABLE_1 on a.CORP=b.CORP
WWWWA 2009-11-06
  • 打赏
  • 举报
回复
SELECT CORP,DATA_TYPE,SUM([VALUE]) FROM (
select A.*,C.*,0 AS [VALUE]
from TABLE_3 a ,TABLE_2 C
UNION
SELECT * FROM TABLE_1)
GROUP BY
CORP,DATA_TYPE
WHERE CORP='B'
xu54647265 2009-11-06
  • 打赏
  • 举报
回复
实际上,我是在做水晶易表的时候遇到的问题。
因为我目前的报表需要一些基础数据,进行计算
但是查出来的结果,有可能是不完整的
这样的话,EXCEL的公式会取不到值
正常的话,假如一个格是:=A1
如果A1有数据就会读到数据,如果A1没数据,就直接成了#REF了
并且,以后再也不会改回:=A1了
这样的话,数据就有问题了……

如何能保证查到的数据,在结构上是完整的
如果没数据可以用0或者直接就是空的?

7,393

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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