데이터베이스 개발자 질문과 답변 게시판
안녕하세요. 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 까지 표현합니다.)