SQL语句,求高手帮忙。。

IT-Sunlight 2013-11-18 01:30:25
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join waterroad water on water.ID = cust.水路号
left join custgrade grade on cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额


cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额
把标志等于1,3的给减掉了,把标志不是(1,3)的给弄成NULL了,怎么可以让标志不是(1,3)的显示原来的值啊?
...全文
107 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-11-18
  • 打赏
  • 举报
回复
引用 6 楼 u010556068 的回复:
引用 5 楼 yupeigu 的回复:
[quote=引用 4 楼 u010556068 的回复:] [quote=引用 1 楼 DBA_Huangzj 的回复:] 到底不是1,3的设为null还是原有值?
经过那条SQL语句以后就是NULL值了,就是把不是1,3的弄成原来的值...
改成这样试试:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select isnull(sum(应收费用),0) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
[/quote]
引用 3 楼 yupeigu 的回复:
引用 楼主 u010556068 的回复:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额 把标志等于1,3的给减掉了,把标志不是(1,3)的给弄成NULL了,怎么可以让标志不是(1,3)的显示原来的值啊?
把sum(应收费用)改成这个 isnull(sum(应收费用),0) 试试:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select isnull(sum(应收费用),0) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
对了- -[/quote] 呵呵,那就好,好像在前几天,刚看过这个类似的语句的。
IT-Sunlight 2013-11-18
  • 打赏
  • 举报
回复
引用 5 楼 yupeigu 的回复:
引用 4 楼 u010556068 的回复:
[quote=引用 1 楼 DBA_Huangzj 的回复:] 到底不是1,3的设为null还是原有值?
经过那条SQL语句以后就是NULL值了,就是把不是1,3的弄成原来的值...
改成这样试试:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select isnull(sum(应收费用),0) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
[/quote]
引用 3 楼 yupeigu 的回复:
引用 楼主 u010556068 的回复:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额 把标志等于1,3的给减掉了,把标志不是(1,3)的给弄成NULL了,怎么可以让标志不是(1,3)的显示原来的值啊?
把sum(应收费用)改成这个 isnull(sum(应收费用),0) 试试:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select isnull(sum(应收费用),0) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
对了- -
LongRui888 2013-11-18
  • 打赏
  • 举报
回复
引用 4 楼 u010556068 的回复:
引用 1 楼 DBA_Huangzj 的回复:
到底不是1,3的设为null还是原有值?
经过那条SQL语句以后就是NULL值了,就是把不是1,3的弄成原来的值...
改成这样试试:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select isnull(sum(应收费用),0) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
IT-Sunlight 2013-11-18
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
到底不是1,3的设为null还是原有值?
经过那条SQL语句以后就是NULL值了,就是把不是1,3的弄成原来的值...
LongRui888 2013-11-18
  • 打赏
  • 举报
回复
引用 楼主 u010556068 的回复:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额 把标志等于1,3的给减掉了,把标志不是(1,3)的给弄成NULL了,怎么可以让标志不是(1,3)的显示原来的值啊?
把sum(应收费用)改成这个 isnull(sum(应收费用),0) 试试:
select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
cust.余额-(select isnull(sum(应收费用),0) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
,cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额
Yole 2013-11-18
  • 打赏
  • 举报
回复

select 客户编号,用户名称,地址,水表号,
grade.水价 as 单价,电话,
case when 标志 in (1,3) then cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID)
else 余额 end 余额,
--cust.余额-(select sum(应收费用) from acct2013 a where 标志 in (1,3) and a.客户ID=cust.ID) 余额,
--cust.余额
cust.备注
from customer cust
left join  waterroad water on water.ID = cust.水路号
left join custgrade grade on  cust.用水分类=grade.ID
--right join acct2013 acct on acct.客户ID=cust.ID 
--where acct.标志 in (1,3)
--where (cust.余额-(select sum(应收费用) from #c  where 客户ID=cust.ID)>0.000009) or 余额-0>0.000009
group by cust.ID,客户编号,用户名称,地址,水表号,grade.水价,电话,cust.备注,cust.余额
order by 余额

用 case when then
發糞塗牆 2013-11-18
  • 打赏
  • 举报
回复
到底不是1,3的设为null还是原有值?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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