안녕하세요. sql초보 중의 초보 입니다.
기본지식 없이 실무를 하고 있는데요..
경영자 정보시스템에 들어가는 테이블들을 DateMart에 만들고 있습니다.
아는게 적어 다소 무식하게 작성 중이니 양해부탁드립니다.
isnull을 넣은것은 지금 데이터가 다 들어가 있지 않아서 확인차원에서 넣었습니다.
질문입니다.
1. 아래에 빨간 쿼리문들이 문법상 정상인건지?
2. 문제가 없을 경우 조건을 기준일 이전으로 하고 싶은데 어떻게 조건을 줘야하는지?
- 예를들면 10/10을 기준일로 조회할 경우 10/9까지의 데이터 합계만 나오도록..
- WHERE절에 dDate >= GETDATE() 하면 되는건가요?
- 가르침 주십시요 꾸벅 _ _
SELECT
C.PrjNo AS PrjNo,
GETDATE() AS dDate,
(isnull(A.ExecTotAmt,0) + isnull(B.ExecTotAmt,0)) AS PlnMcost,
A.ExecTotAmt AS PlnExMCost,
B.ExecTotAmt AS PlnInECost,
(D.prgrss * (isnull(A.ExecTotAmt,0)) / 100) + (D.prgrss * (isnull(B.ExecTotAmt,0)) / 100) AS ByDftAmt,
D.prgrss * (isnull(A.ExecTotAmt,0)) / 100 AS ByDftInAmt,
D.prgrss * (isnull(B.ExecTotAmt,0)) / 100 AS ByDftExAmt,
(A.ExecTotAmt - (D.prgrss * (isnull(A.ExecTotAmt,0)))) + (B.ExecTotAmt - (D.prgrss * (isnull(B.ExecTotAmt,0)))) AS UnByDftAmt,
A.ExecTotAmt - (D.prgrss * (isnull(A.ExecTotAmt,0))) AS UnByDftInAmt,
B.ExecTotAmt - (D.prgrss * (isnull(B.ExecTotAmt,0))) AS UnByDftExAmt,
C.LoadDT AS LoadDT
FROM tst70dd C
join tst09m E on C.prjno = E.prjno
join TPT04DC D on D.prjno = C.prjno
join (select prjno,SUM(ISNULL(ExecTotAmt,0))
AS exectotamt from tst70dd where Gugn = '01' and ItemGubn = '01' group by PrjNo) A on C.PRJNO = A.PRJNO
join (select PRJNO,SUM(ISNULL(ExecTotAmt,0))
AS exectotamt from tst70dd where Gugn = '01' and ItemGubn = '02' group by PrjNo) B on C.PRJNO = B.PRJNO
WHERE
E.PjtMgrYN = 'Y'
GROUP BY C.prjno, C.LoadDt, A.exectotamt, B.exectotamt, D.prgrss
Comment 3
-
자리비움
2017.10.12 17:07
1. 아래에 빨간 쿼리문들이 문법상 정상인건지?=>결과 잘 나오면 문법상 정상입니다.그런데, 쿼리가 착해보이진 않네요.2. 문제가 없을 경우 조건을 기준일 이전으로 하고 싶은데 어떻게 조건을 줘야하는지?- 예를들면 10/10을 기준일로 조회할 경우 10/9까지의 데이터 합계만 나오도록..- WHERE절에 dDate >= GETDATE() 하면 되는건가요?- 가르침 주십시요 꾸벅 _ _=>3번 라인에 dDate 를 말씀하시는거라면 저건 DB 의 현재 시간을 표현하고 있는데요.특정 기간 내의 데이터만 추출하시라면 관계가 되는 테이블들도 해당 기간만큼의 데이터를 불러와야 합니다.즉, FROM 절 이후에 SELECT 가 처리되기 때문에, 날짜 조건이 적용되지 않은 데이터가 이미 집계된 상태입니다.FROM 안에 테이블의 컬럼들 중 기간을 설정 조건을 찾아서 넣어주시면 될 것 같습니다.결과가 출력되면 1일~n일치 raw 데이터와 비교해서 날짜 조건이 잘 적용되었는지 확인하는 습관을 들이시고요. -
콩만듀
2017.10.12 18:09
어떻게 착하게 할 수 있을까요? ㅠㅠ
그리고 날짜는 어떤 특정날짜를 지정하는게 아닌.. 조회시점의 마지막 데이터까지의 합계입니다..
-
자리비움
2017.10.12 18:58
어떻게 착하게 할 수 있을까요? ㅠㅠ
=>
먼저, tst70dd 테이블을 3번 이상 엑세스 할텐데요. 3번 미만으로 줄이는 방법을 생각해보세요.
착한 쿼리로 가는 첫걸음입니다.
그리고 날짜는 어떤 특정날짜를 지정하는게 아닌.. 조회시점의 마지막 데이터까지의 합계입니다..
=>
"예를들면 10/10을 기준일로 조회할 경우 10/9까지의 데이터 합계만 나오도록" 이라고 하셨으니,
특정날짜는 10/9일 23:59:59.99999... 정도가 되겠네요.
(참고로 datetime 형식은 0.997 까지 표현합니다.)