Comment 7
-
Terry
2016.02.02 11:46
위에 쿼리를 만들었는데요 JOIN할 테이블을 변수테이블로 설정하거나 임시테이블 생성없이 저렇게 select문 만으로 JOIN하는방법은 없을까요?질문이 명확히 이해가 되질 않네요^^;;질문의 의도를 파악하기 위해 몇가지 질문드립니다.1. From 절의 Inlive 뷰를 통해 데이터를 Join 하고자 하시는건지?-> 맞다면 상기와 같이 처리하시면 됩니다.2. 변수테이블이라는게??-> MSSQL 에서 제공되는 테이블변수를 이야기하시는건지?-> 테이블변수가 맞다면 쿼리문에서 당연히 사용가능합니다.하기 정보들이 추가로 더 제공이 된다면 좋을듯하네요.1. 샘플데이터2. 처리하고자 하는 형태3. 결과샘플 ( 샘플데이터를 토대로 한 )질문내용만 가지고는 정확히 파악이 안되네요..^^;; -
sincie
2016.02.02 12:10
죄송합니다 제가 질문을 너무 이상하게 한거 같습니다 ㅠ
pointdate
point
pointtypeidx
2016-01-01
10000
1
2016-01-01
-20000
5
2016-01-02
20000
1
2016-02-03
-40000
5
요게 원본 데이터구요
날짜
가산값(합계)
감산값(합계)
합계
2016-01-01
10000
-20000
-10000
2016-01-02
20000
0
20000
2016-02-03
0
-40000
-40000
이게 원하는 출력값입니다.
질문에서 한 쿼리를 실행하면 알리아스 설정하는 곳 JOIN(Select~ ) B에서
'B'의 열 이름이 지정되지 않았습니다. 오류가 나네요 ㅠ
-
Terry
2016.02.02 12:22
결론은 하기 쿼리 참고하시면 되구요..
Inline View 사용시, Sum,Max 등의 내장함수 사용하여 데이터를 가져올 경우
컬럼명을 지칭해주어야 합니다. Alias 주어야 되구요.
그렇지 않으면 DB 엔진에서 저 데이터를 어떤 형태로 가져와야 될지 몰라서
오류를 내뿜어요..
그리구 From 절에서
테이블명에 Alias (별칭) 줄 경우
Select 절이나
Where 절
그리고 On 절에서도 어떤 테이블의 데이터를 가지고 올 것인지
명확히 해주어야 합니다.
안 그러면 역시 DB 엔진이 오류를 내뿜어요..
이해를 못하거든요..^^;
하기쿼리 참고하셔서 기존쿼리랑 비교해보시면 될듯하네요.
맛점하세요~~!
---쿼리시작---
Declare @date1 As char(10) = '2016-01-01'
Declare @date2 As char(10) = '2016-01-02';with tblUserPointLog(PointDate,Point,pointtypeIDX) As
(
Select '2016-01-01',10000 ,1 Union All
Select '2016-01-01',-20000,5 Union All
Select '2016-01-02',20000 ,1 Union All
Select '2016-02-03',-40000,5
)
SELECT CONVERT(CHAR(10),A.PointDate,23) 날짜
,SUM(A.Point) 일별포인트합계
FROM tblUserPointLog A
JOIN (
SELECT CONVERT(CHAR(10),PointDate,23) 날짜
,SUM(Point) As Point
FROM tblUserPointLog
WHERE pointtypeIDX = 5
AND PointDate >= @date1
AND PointDate < @date2
GROUP BY CONVERT(CHAR(10),PointDate,23)
) B
ON A.PointDate = B.날짜
WHERE A.pointtypeIDX = 1
AND A.PointDate >= @date1
AND A.PointDate < @date2
GROUP BY CONVERT(CHAR(10),A.PointDate,23)
---쿼리끝---
-
sincie
2016.02.02 14:58
답변 정말 감사합니다.
주신 쿼리를 실행해보니 B열에 대한 에러는 없어졌는데 결과값이
그림처럼 2016-01-01일에만 나오더라구요 ㅠ
제 원본 쿼리가 시작부터 잘못된거 같은데 혹시 어떻게 수정해야될지 알 수 있을까요
-
Terry
2016.02.02 15:24
원본 쿼리가 잘못된것은 아니구요^^;;
실제 문의글에 있던 쿼리상에
일자 조건이 변수로 되어있더군요..
그래서 동일하게 맞추고
'2016-01-01' 로 날짜를 set해서 그래요.
제가 적었던 쿼리에서 하기 구문이
변수선언 및 값을 할당한 부분이구요~
Declare @date1 As char(10) = '2016-01-01'
Declare @date2 As char(10) = '2016-01-02' -
Terry
2016.02.02 15:39
Declare @date1 char(10)
Declare @date2 char(10)
Set @date1 = '2015-01-01'
Set @date2 = '2015-02-04'
저렇게 수정하셔서 해보시면 될듯하네요..
-
sincie
2016.02.02 16:02
감사합니다!
저런것도 눈치 못채다니..
덕분에 완벽히 해결했습니다 ㅠ
즐거운 하루되세요~