请教各位,此查询如何做???? 问题极难,如能做答,本人愿意200大分奉献(200分)

  • 主题发起人 主题发起人 weimaoan
  • 开始时间 开始时间
W

weimaoan

Unregistered / Unconfirmed
GUEST, unregistred user!
有一抄电表系统的table,字段a0(string),a1(string),a2(datetime),a3(real),a0 为单位名称,a1为住户名称,a3为电表的截止到此时的读数,抄电表系统中心每天循环抄一次电表.请问以下查询如何做?(其中:某住户日期1到日期2期间的耗电为日期2的a3与日期1的a3之差)
1.从日期1到日期2,所有住户共耗电多少度?
2.从日期1到日期2,各单位共耗电多少度?
3.从日期1到日期2,各住户耗电多少度?
4.每次的查询结果在一grid中显示出来
另:若sql查询动态时,与其相连的grid的提示如何变成中文的
 
1. select sum(a.a3-b.a3) as totala3 from
(select * from table1 where a2='xx/xx/xxxx') a,
(select * from table1 where a2='yy/yy/yyyy') b
where a.a0=b.a0 and a.a1=b.a1

2. select a.a0, sum(a.a3-b.a3) as totala3 from
(select * from table1 where a2='xx/xx/xxxx') a,
(select * from table1 where a2='yy/yy/yyyy') b
where a.a0=b.a0 and a.a1=b.a1
group by a.a0

3. select a.a0,a.a1, sum(a.a3-b.a3) as totala3 from
(select * from table1 where a2='xx/xx/xxxx') a,
(select * from table1 where a2='yy/yy/yyyy') b
where a.a0=b.a0 and a.a1=b.a1
group by a.a0,a.a1

4. 只要建立一个datasource, 把datasource.dataset设成以上的query, 然后把
dbgrid.datasource设成新建的datasource就可以了.

要把提示变成中文的, 可以把query中的 as 后面的名字变成中文, 如
select a.a0 as 单位,a.a1 as 住户, sum(a.a3-b.a3) as 耗电数 from
 
1: select sum(a3) from table where a2>=日期1 and a2<=日期2
2,3可要用存储过程
 
cytown用的什么数据库?(sql 7?)
怎么会支持select xxx from (select ...)????
ansi sql92标准可不支持这种用法. from的必须是一个表或者view.
 
我也很奇怪,经常看到别人使用嵌套的select语句,很是羡慕,但是我试用了几种
数据库,都不支持,7456! :-(
 
Mr. cyton等各位老兄:
非常感谢这快获得解答,只是如果凑巧日期'xx/xx/xxxx','yy/yy/yyyy'的数据不存在,应该取离'xx/xx/xxxx','yy/yy/yyyy'最近的日期 即 >='xx/xx/xxxx',<='yy/yy/yyyy'的数据,如何做??再次渴望您及各位大虾的解答!
 
cytown的办法没问题的。
 
dj, 据我知道, 现在好象只有sql7支持这种用法
 
另:我用的是paradox
 
1. select distinct a1, a2, a3 from table1 where a2>='xx/xx/xxxx' order by a2 asc
保存上述语句到一个名为qr1.sql的文件中(文本文件).
2. select distinct a1,a2, a3 from table1 where a2 <= 'yy/yy/yyyy' order by a2 desc
保存上述语句到一个名为qr2.sql的文件
3.
query1.sql.text := 'select sum(b.a3-a.a3) from "qr1.sql" a, "qr2.sql" b where a.a1 = b.a1 group by a.a1';
query1.open;

 
Another-eyes提供的方法中,delphi出错提示 table "qr1.sql'不存在 什么原因?
如写到文件中可行,动态查询时是不是比较麻烦,患有更好的办法么???
 
qr1.sql最好带上完整路径. 或者放到你query.database指定的alias定义的路径中.
 
我觉得用两个query分别执行两个查询, 然后建立mast-detail关系, 程序里
计算并填结果到一个stringgrid中比较容易点.
非要用一个dbgrid显示太麻烦, 而且不值得(只做显示, 又不用修改).
 
1. select sum(a.a3-b.a3) as totala3 from
(select a0,a1,max(a3) a3 from table1
where a2<='xx/xx/xxxx' group by a0,a1) a,
(select a0,a1,min(a3) a3 from table1
where a2>='yy/yy/yyyy' group by a0,a1) b
where a.a0=b.a0 and a.a1=b.a1

2. select a0,sum(a.a3-b.a3) as totala3 from
(select a0,a1,max(a3) a3 from table1
where a2<='xx/xx/xxxx' group by a0,a1) a,
(select a0,a1,min(a3) a3 from table1
where a2>='yy/yy/yyyy' group by a0,a1) b
where a.a0=b.a0
group by a.a0

2. select a0,a1,(a.a3-b.a3) as totala3 from
(select a0,a1,max(a3) a3 from table1
where a2<='xx/xx/xxxx' group by a0,a1) a,
(select a0,a1,min(a3) a3 from table1
where a2>='yy/yy/yyyy' group by a0,a1) b
where a.a0=b.a0

4. 只要建立一个datasource, 把datasource.dataset设成以上的query, 然后把
dbgrid.datasource设成新建的datasource就可以了.

要把提示变成中文的, 可以把query中的 as 后面的名字变成中文, 如
select a.a0 as 单位,a.a1 as 住户, sum(a.a3-b.a3) as 耗电数 from

 
另外加一句:在ORACLE中,子查询是可以的,
但是在PARADOX中,就不一定行了。
 
>cytown用的什么数据库?(sql 7?)
>怎么会支持select xxx from (select ...)????
to cytown
这可是我的"版权"呀,总算有大虾支持这种做法.
 
eyes, cakk:
毛主席保证我用的真的是sql6.5, 绝对没有问题!!!!
 
请将你的系统加一栏位a4(real),a5(datetime)抄表日期, a4 用作计算本次的用电量, 再用transform查询:
TRANSFORM Sum(a4) AS value
SELECT a0 AS 单位, a1 AS 住户,Sum(a4) AS 总计:数量
FROM table GROUP BY a0, a1 PIVOT FORMAT(a5, 'ddddd')

 
查询我支持yck,业务逻辑全在server上,能得到很好的优化性能,
还能体现c/s风格.

显示汉字标题,可先打开query,add所有字段,再改displayname,
虽然可行,但心须字段不能变动。若想动态产生,则可能做个类似
通用的,在表中保存字段的字段名及显示名,再在程序中改变
grid的column属性.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部