database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7073 게시물 읽기
No. 7073
쿼리 조회시 group by 없는 내용 출력
작성자
김지철(jcmmk)
작성일
2017-05-25 14:35ⓒ
2017-05-25 15:58ⓜ
조회수
2,196

안녕하세요

 

 1, 2~~100 의 글이 있다고 할때

각 글은 날짜별로 어디서 접근 했는지  통계를 내고 있습니다.

 

현재 사용한 쿼리는 

 

 

 

 

 

select 글번호, 접근게이트

,count(case when substring(convert(varchar(10),ddayinfo,120),1,7) in ('2017-01') then 1 end )

,count(case when substring(convert(varchar(10),ddayinfo,120),1,7) in ('2017-02') then 1 end )

,count(case when substring(convert(varchar(10),ddayinfo,120),1,7) in ('2017-03') then 1 end )

,count(case when substring(convert(varchar(10),ddayinfo,120),1,7) in ('2017-04') then 1 end )

From 게시글조회테이블

where  status = '1'  group by 글번호, 접근게이트 

 

이렇게 하면 제가 원하는 방식이 나오기는 하는데요

만약 접근 게이트가 맥, 윈도우, 휴대폰 이렇게 나뉘어 있다면

1번글 접근에 휴대폰 접근이 없었다면

결과값이 

글         접근게이트   1월조회수

1번글   맥                    15

1번글   휴대폰             27

 

2번글   맥                     1

2번글   윈도우             50

2번글   휴대폰             1

 

이렇게 나옵니다.  여기서 1번글 윈도우 접근이 0 이렇게 찍히고 싶은데 방법이 있을까요?

 

 

 

 

1번글  맥         15

1번글  윈도우  0

1번글  휴대폰 27

 

 

이 글에 대한 댓글이 총 1건 있습니다.

WITH 게시글조회테이블 AS
(
SELECT 1 글번호, '맥' 접근게이트, CAST('2017-01-01' AS DATETIME) ddayinfo, '1' status
UNION ALL SELECT 1, '휴대폰', '2017-01-01', '1'
UNION ALL SELECT 1, '휴대폰', '2017-01-01', '1'
UNION ALL SELECT 2, '맥'    , '2017-01-01', '1'
UNION ALL SELECT 2, '휴대폰', '2017-01-01', '1'
UNION ALL SELECT 2, '윈도우', '2017-01-01', '1'
UNION ALL SELECT 2, '윈도우', '2017-01-01', '1'
)
, 접근게이트 AS
(
SELECT '맥' 접근게이트
UNION ALL SELECT '윈도우'
UNION ALL SELECT '휴대폰'
)
SELECT a.글번호
     , b.접근게이트
     , ISNULL(MIN(CASE mm WHEN '01' THEN cnt END), 0) m01
     , ISNULL(MIN(CASE mm WHEN '02' THEN cnt END), 0) m02
     , ISNULL(MIN(CASE mm WHEN '03' THEN cnt END), 0) m03
     , ISNULL(MIN(CASE mm WHEN '04' THEN cnt END), 0) m04
     , ISNULL(MIN(CASE mm WHEN '05' THEN cnt END), 0) m05
     , ISNULL(MIN(CASE mm WHEN '06' THEN cnt END), 0) m06
     , ISNULL(MIN(CASE mm WHEN '07' THEN cnt END), 0) m07
     , ISNULL(MIN(CASE mm WHEN '08' THEN cnt END), 0) m08
     , ISNULL(MIN(CASE mm WHEN '09' THEN cnt END), 0) m09
     , ISNULL(MIN(CASE mm WHEN '10' THEN cnt END), 0) m10
     , ISNULL(MIN(CASE mm WHEN '11' THEN cnt END), 0) m11
     , ISNULL(MIN(CASE mm WHEN '12' THEN cnt END), 0) m12
  FROM (SELECT DISTINCT 글번호
          FROM 게시글조회테이블
         WHERE status = '1'
           AND ddayinfo >= '2017-01-01'
           AND ddayinfo <  '2018-01-01'
        ) a
 CROSS JOIN 접근게이트 b
  LEFT OUTER JOIN
       (SELECT 글번호
             , 접근게이트
             , CONVERT(VARCHAR(2), ddayinfo, 22) mm
             , COUNT(*) cnt
          FROM 게시글조회테이블
         WHERE status = '1'
           AND ddayinfo >= '2017-01-01'
           AND ddayinfo <  '2018-01-01'
         GROUP BY 글번호, 접근게이트
             , CONVERT(VARCHAR(2), ddayinfo, 22)
        ) c
    ON a.글번호 = c.글번호
   AND b.접근게이트 = c.접근게이트
 GROUP BY a.글번호, b.접근게이트
 ORDER BY a.글번호, b.접근게이트
;

마농(manon94)님이 2017-05-26 16:08에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7078데이터 짤리는 현상(?)에 대해서 문의 드립니다.
goblin
2017-06-22
1850
7076쿼리 질문 드립니다. [2]
goblin
2017-06-07
1958
7074MSSQL에서 transaction log를 읽을 수 있나요?
김흥교
2017-06-01
1998
7073쿼리 조회시 group by 없는 내용 출력 [1]
김지철
2017-05-25
2196
7072변수를 배열로 받을수 있을까요
이경민
2017-05-22
1944
7054FUNCTION 문안의 UPDATE 시 에러나요 [2]
김우성
2017-05-09
2130
7053사용자 프로세스만 중지할 수 있습니다.
유닉스
2017-05-06
2668
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다