wdpcf 发表于 2009-02-17 15:14

请教一个查询语句

请教一个sql的查询语句,希望大家帮忙内容如下:

楼号 门牌号 编号 名称金额
1   102   1   电费100
1   102   2   水费100
2   205   3   电费100
2   205   4   水费100
出表
楼号 门牌号 电费 水费
1   102   100100
2   205   100100

请帮忙做出语句,我是新手,没有积分给大家,还请原谅。

camham 发表于 2009-02-17 16:52

select 门牌号, 电费=case 名称="电费", 水费=case 名称="水费"

chuxu 发表于 2009-02-18 08:29

楼号 门牌号 编号 名称金额
1   102   1   电费100
1   102   2   水费100
楼号 门牌号 电费 水费

selecta.楼号,a. 门牌号, 电费=a.金额 ,水费=b.金额   
from table a,table b
where a.楼号=b.楼号 and a.门牌号 =b.门牌号and a.名称='电费' and b.名称='水费'

WFCJZ 发表于 2009-02-18 09:18

原帖由 chuxu 于 2009-2-18 08:29 发表 http://bbs3.chinaunix.net/images/common/back.gif
楼号 门牌号 编号 名称金额
1   102   1   电费100
1   102   2   水费100
楼号 门牌号 电费 水费

selecta.楼号,a. 门牌号, 电费=a.金额 ,水费=b.金额   
from table a,table b
where...


用这个吧!

wdpcf 发表于 2009-02-18 10:22

感谢版主和以上几位朋友的热心帮助,抱歉,我举的例子太简单,实际问题要复杂的多,我把问题再深入一点。如果我又增加了物业管理费,清洁费等,是不是还要增加表,from table a,table b,table c,如果这样的话有些麻烦,而且现实问题中还会有其他表比如根据门牌号找到户主姓名。
以前用过这个语句,select distincta.楼号,a.门牌号,b.户主姓名,sum(a.金额*(1-abs(sign(a.编号-1)))) as 电费,sum(a.金额*(1-abs(sign(a.编号-2)))) as 水费 from table a,户主信息 b where a.楼号=b.楼号 and a.门牌号=b.门牌号
group by   a.楼号,a.门牌号,b.户主姓名

现在的问题是电费的编号在不同的楼号不同,水费在不同的楼号也不同,只能依据名称来实现,而sign函数只能计算数字不能计算字符,类化a.金额*(1-abs(sign(a.名称-'电费'))) as 电费,这样的语句不能实现。

[ 本帖最后由 wdpcf 于 2009-2-18 10:28 编辑 ]

chuxu 发表于 2009-02-18 10:34

像这样把按行存储的数据转成按列显示,我感觉似乎没有必要使用一个sql来处理了,开一个游标,用程序或者存储过程来处理吧。

WFCJZ 发表于 2009-02-18 22:16

通过你的应用程序调用你对这个查询编的一存储过程加以实现吧
页: [1]
查看完整版本: 请教一个查询语句