Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

请教一个查询问题,多对多关系的问题。

子煜  发表于:2013-03-16 00:48:36  
复制

详见附档。

问题:  我想要查询 ”计划达成率“  内也能显示未计划的记录,不知如何弄?

总有二个表,一个计划表,一个销售表。

可能有这种情况,有计划的但没有销售记录,有销售的但有可能没有计划记录,但我想要这些记录都能显示在一个查询里,未计划的有销售,计划就为0,有计划没有销售的,销售就为0.。这个关系如何做?

 

Top
子煜 发表于:2013-03-16 09:27:17

附件补上。

点击下载此附件

 



煮江品茶 发表于:2013-03-16 10:02:42

很简单的问题嘛。

设定所有销售都必须有一个对应的计划,把计划分为两类一类是正式计划,一类是临时计划,所有没有计划的销售都转化为临时计划的销售。

这里涉及到两个不同视角的问题:其一是以用户的视角看问题,所以你观察到了销售过程中有的销售是以计划为前提的有的则是不以计划为前提的,这是实际工作的情况;其二是以程序员的角度看问题,所以你可以认为所有的销售都是以计划为前提的,只是所谓的无计划可以转化为临时计划,因为你知道销售都已计划为前提在数据的处理流程上更为便捷和合理。

这个问题的转化很有趣味,其趣味在于用一种分类(正式计划与临时计划)替换了另一种分类(有计划与无计划),而这两种分类在本质上没有什么区别,只是这种转化带来了问题处理的流畅。在解决问题时,要善于对问题进行变通的处理。



小陈 发表于:2013-03-17 09:23:02
如果计划表与 销售表存在一对多关系,建一个记录匹配的查询能达你的目的。

殷小宝 发表于:2013-03-17 15:31:24

建一联合查询:

SELECT 计划数量.月份, 计划数量.型号, 计划数量.厚度, 计划数量.计划数量 AS 计划, 销售数量.型号 AS 销售型号,销售数量.厚度 AS 销售厚度,IIf(IsNull([销售数量])=True,0,[销售数量]) AS 销售, IIf(IsNull([销售数量])=True,0,[销售数量])/[计划数量] AS 达成率
FROM 计划数量 LEFT JOIN 销售数量 ON 计划数量.ID1 = 销售数量.ID1 AND 计划数量.厚度=销售数量.厚度
UNION
SELECT 计划数量.月份,计划数量.型号,计划数量.厚度,计划数量.计划数量,销售数量.型号 AS 销售型号,销售数量.厚度 AS 销售厚度,销售数量.销售数量 AS 销售,IIf(IsNull([销售数量])=True,0,[销售数量])/[计划数量] AS 达成率
FROM 计划数量 RIGHT JOIN 销售数量 ON 计划数量.ID1 = 销售数量.ID1 AND 计划数量.厚度=销售数量.厚度;


结果:

附件:点击下载此附件



子煜 发表于:2013-03-18 10:08:16

殷小宝  其实我的思路跟你的一样,只能用这种方法了。。

 

其他朋友回复的我没看懂。。。



总记录:5篇  页次:1/1 9 1 :