首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于聚合的有关问题

2012-04-12 
关于聚合的问题DeptID PeriodID MenCount shiftID weekidAppointTimeAlreadyCountNULLNULL3103NULL1NULLNU

关于聚合的问题
DeptID PeriodID MenCount shiftID weekid AppointTime AlreadyCount 
NULLNULL3103NULL1
NULLNULL333NULL2
NULLNULL101010NULL1
NULLNULL2083NULL1
NULLNULL22101NULL1
NULLNULL23112NULL1
NULLNULL2584NULL1
NULLNULL30193NULL1
NULLNULL3083NULL1
NULLNULL33102NULL1
NULLNULL4083NULL1
NULLNULL44101NULL1
NULLNULL50194NULL1
NULLNULL55195NULL1
NULLNULL5594NULL1
NULLNULL88101NULL1
NULLNULL88107NULL1
NULLNULL8891NULL1
NULLNULL34561NULL2
3125842012-02-02 00:00:00.000
3225842012-02-02 00:00:00.000

SQL code
declare @AppointTime datetime,@DeptID Nvarchar(50),@ShiftID Nvarchar(50),@WeekID Nvarchar(50)set @deptID='3'set @AppointTime='2012-2-2'set @ShiftID='8'set @WeekID='4'select count(*) AlreadyCount,app.Deptid,app.PeriodID,sd.MenCount ,shiftID ,sd.WeekID,app.AppointTimefrom  ShiftDetail sd left join AppointList Appon sd.ShiftID=@ShiftID and sd.WeekID=@WeekID  and  app.PeriodID=sd.PeriodID  and  app.AppointTime=@AppointTimegroup by  app.AppointTime,app.DeptID,app.PeriodID ,sd.MenCount,shiftID,sd.WeekIDorder by app.periodID


我都指定 @ShiftID='8' @WeekID='4',为什么结果里边这么多不符合的






[解决办法]


好多null,好壮观啊
[解决办法]
因为 left join
[解决办法]
on,where毫无疑问可以一起使用。

a left join b 结果:a全集, b交集
on:ab相交条件,决定b返回什么数据,如无where条件a肯定全部返回。
where:对left join结果进一步筛选。

我所说的逻辑就是你希望a如何b相交(on条件),最后期望得到什么数据(where条件)。

[解决办法]
探讨

引用:
引用:

引用:
因为 left join


那么要怎么样才能左链接,同时 @ShiftID='8' @WeekID='4'也成立


在于你要什么结果,left join的目的或者说逻辑是什么,下面不一定是你要的结果:


SQL code
on /*sd.ShiftID=……

[解决办法]
好好看看再改。
[解决办法]
我建议楼主先执行
SQL code
select app.Deptid,app.PeriodID,sd.MenCount ,shiftID ,sd.WeekID,app.AppointTimefrom  ShiftDetail sd left join AppointList Appon sd.ShiftID=@ShiftID and sd.WeekID=@WeekID  and  app.PeriodID=sd.PeriodID  and  app.AppointTime=@AppointTime
[解决办法]
select count(*) AlreadyCount,app.Deptid,app.PeriodID,sd.MenCount ,shiftID ,sd.WeekID,app.AppointTime
from ShiftDetail sd inner join AppointList App
on sd.ShiftID=@ShiftID and sd.WeekID=@WeekID and app.PeriodID=sd.PeriodID and app.AppointTime=@AppointTime
group by app.AppointTime,app.DeptID,app.PeriodID ,sd.MenCount,shiftID,sd.WeekID
order by app.periodID

热点排行