Board Pds Study Photo Star Love Diary Pleasure Baby WebCam
만남: 2003. 4. 6( 2709일 )   결혼: 2005.10.16(1785일 )    나윤 : 2007.11.24 ( 1016일 )

StudyNote(알아간다는 것)

 List

2006-06-27 오후 5:43:00에   별아해님이  글을 남겨주셨습니다.  Hit : 721 

Subject :헷갈리는 프로시저

프로젝트 마무리 중에 내가 짜놓고도 들여다보니 머리가 어지럽다.


기간조건이 안 들어갈때는 서브쿼리를 그냥 View로 만들어서 하니 그나마 더 간단했는데,


날짜 조건이 들어가다 보니 서브쿼리단에서 기간조건이 부여되야해서 풀어서 썼더니 너무 복잡하다.


 파란색이 원래 뷰로 되어 있던거고.


이눔의 CID가 불확실하게 전달되다보니. NoneCID 때문에 if 조건이 하나 들어가서 동일한 반복문이 더 어렵게 되었다.


CREATE Proc [dbo].[up_DiffCidLog]
@Sdate DateTime ,
@Edate DateTime,
@DCnt int,
@ChkNoneCid char(1)='0'


as


if(@ChkNoneCid = '1' )
 select a.* from
  (
  SELECT   CID, TID, COUNT(TID) AS TIDCnt, MAX(mdate) AS MWdate
   FROM      (SELECT   CID, TID, MAX(Wdate) AS mdate
                    FROM      dbo.CardUse
       Where Wdate Between @Sdate And @Edate
                    GROUP BY CID, TID, Wdate
  ) a
  GROUP BY  CID, TID
) a,
 (
 select Cid  From (
 select * from
  (
  SELECT   CID, TID, COUNT(TID) AS TIDCnt, MAX(mdate) AS MWdate
  FROM      (SELECT   CID, TID, MAX(Wdate) AS mdate
                   FROM      dbo.CardUse
      Where Wdate Between @Sdate And @Edate
                   GROUP BY CID, TID, Wdate
  ) a
  GROUP BY  CID, TID
) b
  where tidcnt >;= @DCnt  ) as d
 group by cid
 having count(cid) >; 1
 ) as b
 where a.cid=b.cid



else
 select a.* from
   (
   SELECT   CID, TID, COUNT(TID) AS TIDCnt, MAX(mdate) AS MWdate
   FROM      (SELECT   CID, TID, MAX(Wdate) AS mdate
                    FROM      dbo.CardUse
       Where Wdate Between @Sdate And @Edate
                    GROUP BY CID, TID, Wdate) a
   GROUP BY  CID, TID
   ) a,
 (
 select cid From (
 select * from
  (
  SELECT   CID, TID, COUNT(TID) AS TIDCnt, MAX(mdate) AS MWdate
  FROM      (SELECT   CID, TID, MAX(Wdate) AS mdate
                   FROM      dbo.CardUse
      Where Wdate Between @Sdate And @Edate
                   GROUP BY CID, TID, Wdate) a
  GROUP BY  CID, TID
  ) b
   where tidcnt >;= @DCnt  and cid <;>;' ) as d
 group by cid
 having count(cid) >; 1
 ) as b
 where a.cid=b.cid
GO


-- 샘플로 테스트했던 사항


declare @Sdate datetime
declare @Edate datetime 
set @Sdate = dateadd(d,-30,getdate())
set @Edate = getdate()


exec up_diffTidLog @Sdate, @Edate,1,1


 


----- 쿼리 결과는 아래와 같다.


CID             TID             TIDCnt      MWdate                                                
--------------- --------------- ----------- ------------------------------------------------------
01030014508     12345678        1           2006-06-10 11:28:00.000
01030014508     123456789012345 2           2006-06-13 17:20:00.000


(2개 행 적용됨)


List    Reply    New Article     비밀번호:  Edit   Delete  

 글쓴이
한마디

  패스워드
[ Save ]

 

 
 

Powered By Starhunt