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

请问外联连接SQL语句有关问题

2012-12-14 
请教外联连接SQL语句问题本帖最后由 cbcman 于 2012-11-09 11:39:03 编辑请教一下,从a集合里查询的值,如何

请教外联连接SQL语句问题
本帖最后由 cbcman 于 2012-11-09 11:39:03 编辑 请教一下,从a集合里查询的值,如何放到b集合里面使用作为条件呢??

例如下面的代码:a集合里面拿到一个字段名是 FirstDate 的日期(不只一条记录),我想把这些字段值放到b集合里面作为筛选条件,下面代码肯定是错的,有办法实现吗??谢谢


declare @StartDate varchar(20)   --这个外面传进来的值。

select ID,SchoolID,FirstDate,TotalMoney 
from
(
     select ID,SchoolID,FristDate from table1
) a
LEFT JOIN
(
     select SchoolID,sum(TotalMoney) as TotalMoney from talbe2
     where YearMonthDay between a.FristDate between @StartDate
) b on a.SchoolID=b.SchoolID


[最优解释]
declare @StartDate varchar(20)   --这个外面传进来的值。  
 select ID,SchoolID,FirstDate,(select sum(TotalMoney) as TotalMoney from talbe2   b   where a.SchoolID=b.SchoolID   and YearMonthDay between a.FristDate between @StartDate ) TotalMoney 
from table1  a
 
[其他解释]
declare @StartDate varchar(20)   --这个外面传进来的值。 
select ID,SchoolID,FirstDate,TotalMoney 
from(     select ID,SchoolID,FristDate from table1) a
LEFT JOIN(     select SchoolID,sum(TotalMoney) as TotalMoney from talbe2  as X inner join table1 as Y  on x.schoolid=y.schoolid 
where YearMonthDay between Y.FristDate between @StartDate) b 
on a.SchoolID=b.SchoolID
[其他解释]

--表ta(date) tb(date)
select *
from ta
where date in (select date from tb group by date)

select *
from ta a
where exists (select 1 from tb where a.date = date)

select a.*
from ta a join tb b on a.date = b.date

-- ...

[其他解释]
这样试试:

declare @StartDate varchar(20)   --这个外面传进来的值。

SELECTA1.ID,
A1.SchoolID,
A1.FirstDate,
B1.TotalMoney
FROMtable1 AS A1 WITH(NOLOCK) LEFT JOIN
(
SELECTB.SchoolID,
SUM(B.TotalMoney) AS TotalMoney
FROMtable1 AS A WITH(NOLOCK) INNER JOIN
table2 AS B WITH(NOLOCK) ON A.SchoolID=A.SchoolID
WHEREB.YearMonthDay BETWEEN A.FristDate
ANDCAST(@StartDate AS DATETIME)
GROUP BY B.SchoolID
) AS B1 ON A1.SchoolID=B1.SchoolID

[其他解释]
字符串作为条件需要动态执行。

热点排行