mssql distinct count 문의 0 5 649

by 아싸헛스윙 [SQLServer] [2018.12.17 20:23:39]


with table1 as (
select 'A' A1,    '500000' A2, '2018-12-17 17:24:16.200' A3
union all 
select 'A' A1,    '500000' A2, '2018-12-17 17:24:16.200' A3
union all 
select 'B' A1,    '400000' A2, '2018-12-17 20:24:16.200' A3
union all 
select 'B' A1,    '400000' A2, '2018-12-17 20:24:16.200' A3
union all 
select 'B' A1,    '400000' A2, '2018-12-17 20:24:16.200' A3
union all 
select 'C' A1,    '500500' A2, '2018-12-17 23:20:16.200' A3
union all 
select 'C' A1,    '500500' A2, '2018-12-17 23:20:16.200' A3
)


select * from ( 
	SELECT 
	DENSE_RANK() OVER(ORDER BY S.A3 desc, S.A1) AS Row
	 ,*
     , count(*) over() PageTotalCount
	 FROM (
		select ROW_NUMBER() OVER(PARTITION BY orderInfo.A1 ORDER BY orderInfo.A1) TopOrderRow
		, orderInfo.*
		 from table1 orderInfo
	) S
) S2

-------------------------------------------------------------------------

안녕하세요. 위의 쿼리로 열심히 생각해보았는데 한계가 있어 도움 좀 부탁드립니다.

table1은 원래  union all 하여 여러 테이블을 가져와서 사용 하고 있습니다.

제가 생성하고 싶은 쿼리는 PageTotalCount라는 컬럼으로 ROW 또는 A1을 기준으로 중복이 제거 된 총 개수를 구하고 싶습니다.

아래와 같이 표현하고싶은데 도움 좀 부탁드립니다.

count(*) over()로 하니 모든행이 7개로 나오네요 ㅠㅠ 이걸 모두 3으로 표현하려면 어떻게 해야할까요;

 

ROW TOPORDERROW A1 A2 A3 PageTotalCount
1 1 C 500500 2018-12-17 23:20:16.200 3
1 2 C 500500 2018-12-17 23:20:16.200 3
2 1 B 400000 2018-12-17 20:24:16.200 3
2 2 B 400000 2018-12-17 20:24:16.200 3
2 3 B 400000 2018-12-17 20:24:16.200 3
3 1 A 500000 2018-12-17 17:24:16.200 3
3 2 A 500000 2018-12-17 17:24:16.200 3

이렇게 충첩으로 쿼리를 작성한 이유는 S2에서 row를 활용하여 페이징처리를 하고 있습니다.

S 셀렉트 안에 여러 조건문이 추가 될거라 검색된 모든 개수가 필요한 상황입니다 ㅠㅠ

by 랑에1 [2018.12.18 10:30:23]

COUNT(DISTINCT A1) OVER()

제가 이해한게 맞다면 이렇게 해보세요.

 


by 아싸헛스윙 [2018.12.18 10:55:33]

제일 먼저 그렇게 해봤는데 group by가 필요하다고 나오더라구요

애초에 불가능한거라 쿼리를 이중으로 짜야하나 생각중입니다;


by 마농 [2018.12.19 08:50:24]

원래 Distinct Count 되는건데요?
버전이 낮아서 안되는 걸까요?
COUNT(CASE WHEN TopOrderRow = 1 THEN a1 END) OVER()


by 아싸헛스윙 [2018.12.20 11:53:24]

헉 고민하다가 2중으로 짰는데 한번 검토해보도록 하겠습니다.

버전은 mssql 2008 r2 사용하고있어요


by 아싸헛스윙 [2018.12.20 12:48:40]

와 감사합니다. 여기서 case when이 되는구나.. 감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입