ACCESS裡用VBA寫SQL的迴圈,我觉得碰到一个大问题,想了很久

zhangjiqi1990 2013-07-15 05:29:19
我的查询来源只有一张表格,暂时称之为t1, 我的想法是查询时首先让用户输入年份,比如说:2012-2014.

表1中有一个欄位是年份,有2011,2012,2013,2014不等,另有诺干个欄位a,b,c,d.

当用户输入2012-2014 时, 我想要的sql语言是 select sum(IIf(year=2011,a,IIf(year=2012,a+b,IIf (year=2013,a+b,IIf(year=2014,b,0)))))

from t1

group by Supplier,

就是先把用户输入的起始年份退一年选欄位a,最后一年选欄位b,中间的年份选择a+b,按照供货商进行分组总和.

我单纯用sql其实功能已经实现,但由与年份实在太多,我不可能预先将所有可能表格都做好,所以我就想结合vb,根据用户的输入来生成表格.

比如输入2001-2007,那就是select sum(IIf(year=2000,a,IIf(year=2001,a+b,等等直到IIf (year=2006,a+b,IIf(year=2007,b,0)))))

如果输入2012-2012,就表示只想查看一年,那对应的就是select sum(IIF(year=2011,a,IIf(year=2012,b,0))).

我感觉是用迴圈来实现,只查询一年,生成两个iif,查询2年,就生成3个iff,...,查询5年生成6个iif,可我想了很久还是没作出来,求各位大大指点,不胜感激.






...全文
119 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhangjiqi1990 2013-07-17
引用 5 楼 ACMAIN_CHM 的回复:
当您的问题得到解答后请及时结贴. http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html 8、如何给分和结贴? http://community.csdn.net/Help/HelpCenter.htm#结帖
我知道,不过我最后还有一个小问题,在做表格的时候我把一栏设置为货币,然后有诺干百分比,在查询中我让货币乘以百分比,我本来以为得到的还是货币单位,结果是196,839997529984,这种数字,因为我是根据用户要求来产生查询,然后我在SQL里加入FORMATCURRECY,就变成向左对齐了,很不美观,能作到显示¥196.83后还能向右对齐吗??
回复
zhangjiqi1990 2013-07-16
引用 3 楼 ACMAIN_CHM 的回复:
select sum(iif(year<>2014,a,0)+iif(year<>2011,b,0)) from t1 where year between 2011 and 2014 group by Supplier
谢谢版主大大,我本来还在想用for语句来根据需求产生中间的年份,查询5年有6个IIF,中间就是4个,但是太麻烦了,因为不止有A,B两个栏位,一共有16个,在VBA里结合FOR判断产生8条SQL语句我会疯掉的,现在用了NOT IN就方便 ,我最后依葫芦花漂 SELECT Abfrage1.Lieferant, sum(IIf(Year(Lieferdatum)=2011,Abfrage1.[12Mo-aktJahr],IIf(year(Lieferdatum)=2013,Abfrage1.[Erhöhung aktuelles Jahr],IIf(Year(Lieferdatum) Not In (2011,2013),Abfrage1.[Erhöhung auf 12 Monate],0)))) AS Erho, sum(IIf(Year(Lieferdatum)=2011,M2,IIf(Year(LieferDatum)=2013,M1,IIf(Year(Lieferdatum) Not In (2011,2013),M1+M2,0)))) AS M, sum(IIf(Year(Lieferdatum)=2011,Z2,IIf(Year(LieferDatum)=2013,Z1,IIf(Year(Lieferdatum) Not In (2011,2013),Z1+Z2,0)))) AS Z, sum(IIf(Year(Lieferdatum)=2011,B2,IIf(Year(LieferDatum)=2013,B1,IIf(Year(Lieferdatum) Not In (2011,2013),B1+B2,0)))) AS B, ... FROM Abfrage1 WHERE Year(LieferDatum) between 2011 and 2013 GROUP BY Abfrage1.Lieferant; 最后我在写VBA,让用户输入两个参数,起止年份就能产生相应查询 多谢大大启发. 最后还有一个问题,在做表格的时候我把一栏设置为货币,然后有诺干百分比,在查询中我让货币乘以百分比,我本来以为得到的还是货币单位,结果是196,839997529984,这种数字,因为我是根据用户要求来产生查询,然后我在SQL里加入FORMATCURRECY,就变成向左对齐了,很不美观,能作到196.83后还能向右对齐吗??
回复
ACMAIN_CHM 2013-07-15
select sum(iif(year<>2014,a,0)+iif(year<>2011,b,0)) from t1 where year between 2011 and 2014 group by Supplier
回复
zhangjiqi1990 2013-07-15
引用 1 楼 wwwwb 的回复:
要用代码生成SQL语句再执行
因为iif的个数由用户输入的年份的个数来决定,我不知道怎么在vba里写.可以给一点提示吗?
回复
wwwwb 2013-07-15
要用代码生成SQL语句再执行
回复
相关推荐
发帖
Access
创建于2007-09-28

7520

社区成员

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
申请成为版主
帖子事件
创建了帖子
2013-07-15 05:29
社区公告
暂无公告