一个多表查询的问题!!!!!!!!

qiudong_5210 2011-08-11 02:56:35
具体的先看一下上次的帖子http://topic.csdn.net/u/20110810/10/9c7761c5-3e76-413e-b7c3-5a038871a1fc.html

现在要添加一个条件B表中的IsCharge,如果IsCharge=1
就查询出LoginName和数量,如果没有数量的就为0

如果IsCharge=0的话,只记录LoginName 和数量,没有数量 的不记录,
改怎么办啊?
...全文
155 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiudong_5210 2011-08-15
  • 打赏
  • 举报
回复
我这里还需要查询出B中的Id谢谢, Id,LoginName ,count
qiudong_5210 2011-08-12
  • 打赏
  • 举报
回复
简单说点就是,A表是用户登录表,B表式用户信息表,其中IsCharge 是用户的状态,0和1
其他表是用户信息扩展表,辅助的查询条件,
现在如果没有指定查询条件IsCharge=1 那么就查询出有登录信息的用户和登录次数

如果指定查询条件中存在IsCharge=1,那么就查询出IsCharge=1的用户登录信息,如果IsCharge=1的用户中没有登录过,那么他的登录次数为0
qiudong_5210 2011-08-12
  • 打赏
  • 举报
回复
不行啊,ischarge是在B表中的,我把if exists 中的表改为B表之后,出现的仍然是在A表中有记录的数据,
而B表中有,A表中没有的数据依然没有出现
chtzhking 2011-08-12
  • 打赏
  • 举报
回复
数据还是你第一次发帖子里面的数据
把后面的时间,ParentId,ProvinceId,IsCharge变成参数传进去就可以了
chtzhking 2011-08-12
  • 打赏
  • 举报
回复

select hh.LoginName,ISNULL(gg.cou,0) as '数量' from
(SELECT AA.LoginName,COUNT(DISTINCT AA.LogId)AS cou
FROM d DD,C CC,F FF,e EE,B BB,A AA
WHERE FF.provinceId=EE.ProvinceId AND EE.CityId=BB.CityId AND AA.LoginName=BB.LoginName AND DD.RelationId=CC.RelationId AND AA.LoginName=CC.LoginName
AND AA.LoginDate BETWEEN '2011-08-08 00:00:00' AND '2011-08-09 23:59:59' AND ParentId=1 AND FF.ProvinceId=1
GROUP BY AA.LoginName) as gg right join (select distinct LoginName from b) as hh on gg.LoginName=hh.LoginName

select hh.LoginName,ISNULL(gg.cou,0) as '数量' from
(SELECT AA.LoginName,COUNT(DISTINCT AA.LogId)AS cou
FROM d DD,C CC,F FF,e EE,B BB,A AA
WHERE FF.provinceId=EE.ProvinceId AND EE.CityId=BB.CityId AND AA.LoginName=BB.LoginName AND DD.RelationId=CC.RelationId AND AA.LoginName=CC.LoginName
AND AA.LoginDate BETWEEN '2011-08-08 00:00:00' AND '2011-08-09 23:59:59' AND ParentId=1 AND FF.ProvinceId=1 AND BB.IsCharge=1
GROUP BY AA.LoginName) as gg right join (select distinct LoginName from b) as hh on gg.LoginName=hh.LoginName
--------------------------------------------------------
LoginName 数量
------------- -----------
test 4
tests 2
zhang 0

(3 行受影响)



(1 行受影响)
LoginName 数量
------------- -----------
test 4
tests 0
zhang 0
--小F-- 2011-08-11
  • 打赏
  • 举报
回复
if exists(select isCharge from a where isCharge = 1)

select
a.LoginName,isnull(count(distinct a.logid),0) as '数量',
from
a,b,c,d,e,f
where
a.LoginName=b.LoginName
and
a.LoginName=c.LoginName
and
c.RelationId=d.RelationId
and
b.CityId=e.CityId
and
e.ProvinceId=f.ProvinceId
and
a.LoginDate between 'xx' and 'xx' ---你要传的参数
and
d.ParentId=xx --你要传的参数
and
f.ProvinceId=xx ---你要传的参数
group by
a.LoginName
else
select
a.LoginName,count(distinct a.logid) as '数量',
from
a,b,c,d,e,f
where
a.LoginName=b.LoginName
and
a.LoginName=c.LoginName
and
c.RelationId=d.RelationId
and
b.CityId=e.CityId
and
e.ProvinceId=f.ProvinceId
and
a.LoginDate between 'xx' and 'xx' ---你要传的参数
and
d.ParentId=xx --你要传的参数
and
f.ProvinceId=xx ---你要传的参数
group by
a.LoginName
having
isnull(count(distinct a.logid),0)<>0
chtzhking 2011-08-11
  • 打赏
  • 举报
回复
能描述的清楚点吗?
qiudong_5210 2011-08-11
  • 打赏
  • 举报
回复
关键是中间的部分啊……
Neo_1 2011-08-11
  • 打赏
  • 举报
回复
同意楼上的

case isCharge where 1 then ....... else ....... end


还有一种就是建立一个存储过程,用if .... else .....来判断你的逻辑,用两个语句来写~
chuanzhang5687 2011-08-11
  • 打赏
  • 举报
回复
case when isCharge = 1 then sum(..) else ...

22,210

社区成员

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

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