Archive

Posts Tagged ‘ffsa’

一个很长的SQL,花了我一天的时间

June 11th, 2009 Tony hu 5 comments

从昨天下午三点开始做这一个查询,到今天下午两点钟,终于搞定了。

BEGIN
Set @tsql=’Select C.CheckerID,C.CheckerName,isnull(D.date1,D.date2) date1,D.CSum1,D.QTY1,D.CSum2,D.QTY2
from (Select CheckerID, CheckerName from CheckerList where CheckerType=1) C
full join
(Select A.CSum1,A.QTY1,B.CSum2,B.QTY2,A.date1,B.date2,A.Checker Checker1,B.Checker Checker2 From
(Select count(CarQTY) as CSum1,sum(cast(CarQTY as bigint))  as QTY1,
CONVERT(varchar(100), FormDate, 23) date1,Checker
from FeedBack
where FormDate between ”’+@StartDate+”’ and ”’+@EndDate+”’
and (FeedBackType=1 or FeedBackType=2)
group by  CONVERT(varchar(100), FormDate, 23),Checker) A
full join
(Select count(CarQTY) as CSum2,sum(cast(CarQTY as bigint))  as QTY2,
CONVERT(varchar(100), FormDate, 23) date2,Checker
from FeedBack
where FormDate between ”’+@StartDate+”’ and ”’+@EndDate+”’
and (FeedBackType=3 or FeedBackType=4)
group by  CONVERT(varchar(100), FormDate, 23),Checker) B
On ( A.Checker=B.Checker and A.date1=B.date2)
) D
On (C.CheckerName=D.Checker1 or C.CheckerName=D.Checker2)
order by C.CheckerID’
END

下面附上两个图:(查询分析图,程序最终UI图)

sql_server_ffsa

capsugel_ffsa_ui

这个里面用了两个比较重要的full join, 以前一直觉得full join 用的情况不多,这一次总算帮我我的忙了。
情况是这样的,t1 表中有数据,t2表中也有数据,两个表中的某些字段相同时需要将两个表中的值合并,不相同时也需要列出来,但是需要将数据以每一个操作工,每天的情况列出来,如果操作工没有数据,也需在将操作工的名字列出来。
OK, 人才。

Categories: Database, Sql Server Tags: , ,