Sql 使用完全外部联接时,无法在主查询中指定where子句

Sql 使用完全外部联接时,无法在主查询中指定where子句,sql,sql-server,Sql,Sql Server,我需要计算每个期间的每月津贴和加班津贴的总和 当我在主查询中指定where子句时,子查询中的结果将不会出现 这是我的剧本 select isnull(T1.Emp_Id,T2.Emp_Id) Emp_Id,isnull(T1.Track,T2.Track) DayTY ,isnull(Pay,0) MealAllowance_Mont, isnull(MealAllowance,0) MealAllowance ,isnull(Pay,0) + isnull(MealAllowa

我需要计算每个期间的每月津贴和加班津贴的总和

当我在主查询中指定where子句时,子查询中的结果将不会出现

这是我的剧本

select isnull(T1.Emp_Id,T2.Emp_Id) Emp_Id,isnull(T1.Track,T2.Track) DayTY
   ,isnull(Pay,0) MealAllowance_Mont, isnull(MealAllowance,0) MealAllowance
   ,isnull(Pay,0) + isnull(MealAllowance,0) Tot, isnull(t1.Period,T2.Period) Period
from [dbo].[SPCM_TX_MonthlyAllowance] T1
full outer join
(
   select T2.Emp_Id, T2.Track,T2.Period,sum(MealAllowance_OT) MealAllowance
   from [dbo].[SPCM_Cal_OTLog] T2
    where LEFT(CONVERT(varchar, T2.Period,23),7) = '2019-11'    
   group by T2.Emp_Id,T2.Track,T2.Period
) T2
   on T1.Emp_Id = T2.Emp_Id   
   order by Period desc

我的问题是我不能同时指定周期表

我建议
union all
group by
。我不太清楚您想要结果集的是什么,但类似于以下内容:

select t.Emp_Id, t.Track, t.period,
       sum(pay), sum(MealAllowance_OT), sum(MealAllowance)
from ((select empid, track, period, Pay, MealAllowance_OT, MealAllowance
       from [dbo].[SPCM_TX_MonthlyAllowance] T1
      ) union all
      (select Emp_Id, Track, Period, 0, MealAllowance_OT, MealAllowance
       from [dbo].[SPCM_Cal_OTLog]
      )
     ) t
where period >= '2019-11-01' and
      period < '2019-12-01'
group by t.Emp_Id, t.Track, t.period
选择t.Emp\u Id、t.轨迹、t.周期、,
金额(支付)、金额(计量单位)、金额(计量单位)
从((选择时间、轨道、期间、工资、计量、计量)
从[dbo].[SPCM\U TX\u MonthlyAllowance]T1
)联合所有
(选择环境标识、轨道、周期、0、测量值、测量值)
来自[dbo]。[SPCM\U Cal\U OTLog]
)
)t
其中期间>='2019-11-01'和
期间<'2019-12-01'
按t.Emp_Id、t.轨迹、t.周期分组

我不明白你的意思。你没有问任何问题,也没有说明为什么你所拥有的东西没有如你所期望的那样发挥作用。您在“main”查询中提到了一个
WHERE
,但在SQL中没有。另外,为什么要将日期和时间列转换为子查询的
WHERE
中的
varchar
,而
varchar
没有声明长度。你应该使用正确的日期逻辑。非常感谢戈登。你回答中的解释为我指明了正确的方向。是的,我在有问题的帖子中解释得不清楚,因为我需要更多来加入3表。实际上,我不清楚普通连接T1和子查询连接(如左连接)之间的区别(选择*自…)