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
운영게시판
최근게시물
MySQL Q&A 30807 게시물 읽기
No. 30807
쿼리 질문입니다
작성자
이종원(superdoc)
작성일
2014-12-09 13:40ⓒ
2014-12-09 13:41ⓜ
조회수
9,005

 Table A 

num name
1 NAME1
2 NAME2

 

Table B

num wdate etc
1 2014-10-13 BBB
1 2014-10-13 CCC
1 2014-10-14 DDD
2 2014-10-13 EEE

  

Table C

num wdate etc
1 2014-10-13 EEE
2 2014-10-15 FFF
2 2014-10-16 GGG

 

이렇게 테이블이 있습니다.

A.num = B.num , A.num=C.num 인 관계입니다.

제가 원하는 결과는

num wdate name Table B에서의 개수 Table C에서의 개수
1 2014-10-13 NAME1 2 1
2 2014-10-13 NAME2 1 1
1 2014-10-14 NAME1 1 0
2 2014-10-15 NAME2 0 1
2 2014-10-16 NAME2 0 1

 

이렇게 날짜별로 나왔으면 합니다.

여러가지로 해봤는데 잘 되지 않아서 질문 드립니다.

 

 

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

mysql 은 모르는 관계로 -_-;

mssql 로 작성했습니다.

 

B와 C 테이블의 차이가 뭔지요????

동일 컬럼에 동일 목적인듯한데..

1개의 Table 로 관리가 되어도 무방할듯한데요..

-_-;;;

동일 목적의 Tbl 에 동일컬럼이라

제 능력에서는 하기 형태로밖에 안나오네요..

 

 

DROP TABLE #A
Create Table #A
(
  [num]  [Decimal](18,0) Null
 ,[name] [char](10) Null
)


Drop Table #B
Create Table #B
(
  [num]  [Decimal](18,0) Null
 ,[wdate] [char](10) Null
 ,[etc]   [char](10) Null
)

Drop Table #C
Create Table #C
(
  [num]  [Decimal](18,0) Null
 ,[wdate] [char](10) Null
 ,[etc]   [char](10) Null
)

Insert
  Into #A
Select 1,'NAME1' Union All
Select 2,'NAME2'

Insert
  Into #B
Select 1,'2014-10-13','BBB' Union All
Select 1,'2014-10-13','CCC' Union All
Select 1,'2014-10-14','DDD' Union All
Select 2,'2014-10-13','EEE'

Insert
  Into #C
Select 1,'2014-10-13','EEE' Union All
Select 2,'2014-10-15','FFF' Union All
Select 2,'2014-10-16','GGG'

    Select a.num
          ,a.wdate
          ,a.name
          ,SUM(a.tblb_cnt)
          ,SUM(a.tblc_cnt)
         
      From
            (
                Select #A.num
                      ,d.wdate
                      ,#A.name
                      ,ISNULL(d.cnt,0) As tblb_cnt
                      ,0               As tblc_cnt
                  From #A
                          Inner Join
                                          (
                                               Select COUNT(1) As cnt
                                                     ,a.num
                                                     ,a.wdate
                                                 From #B a
                                             Group By a.num
                                                     ,a.wdate
                                          ) As d
                                                 On #A.num = d.num        
               
             Union All
               
                Select #A.num
                      ,e.wdate
                      ,#A.name
                      ,0               As tblb_cnt
                      ,ISNULL(e.cnt,0) As tblc_cnt
                  From #A
                          Inner Join
                                          (
                                               Select COUNT(1) As cnt
                                                     ,a.num
                                                     ,a.wdate
                                                 From #C a
                                             Group By a.num
                                                     ,a.wdate
                                          ) As e
                                                 On #A.num = e.num        
                                                
            ) a
    Group By a.num
            ,a.wdate
            ,a.name
    Order By a.wdate ASC
            ,a.num
            ,a.name        
           

최한영(terry0515)님이 2014-12-09 18:59에 작성한 댓글입니다.

SELECT b.num
     , b.wdate
     , a.name
     , b.cnt_b
     , b.cnt_c
  FROM (SELECT num, wdate
             , MAX(cnt_b) cnt_b
             , MAX(cnt_c) cnt_c
          FROM (SELECT num, wdate
                     , COUNT(*) cnt_b
                     , 0        cnt_c
                  FROM b
                 GROUP BY num, wdate
                 UNION ALL
                SELECT num, wdate
                     , 0        cnt_b
                     , COUNT(*) cnt_c
                  FROM c
                 GROUP BY num, wdate
                ) b
         GROUP BY num, wdate
        ) b
 INNER JOIN a
    ON a.num = b.num
 ORDER BY b.wdate, b.num
;

마농(manon94)님이 2014-12-10 09:08에 작성한 댓글입니다.
이 댓글은 2014-12-10 09:38에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
30810user 권한에 따른 성능차이가 있을까요? [1]
송진석
2014-12-17
8402
30809SELECT 속도 때문에 질문드립니다. [1]
바카
2014-12-17
9569
30808검색 관련 질문입니다. [1]
yap
2014-12-16
8420
30807쿼리 질문입니다 [2]
이종원
2014-12-09
9005
30806IDC에 있는 제 리눅스 mysql서버의 레이드에 HDD미러링중인 2개의 하드가 각각 정상인지를 매일 확인해 볼수 있는 방법이 뭘까요? [1]
최용주
2014-12-08
8830
30804Median 값을 구하고 싶습니다. [1]
박카스
2014-12-03
8824
30803쿼리문 작성에 도움이 필요합니다. [1]
mysqler
2014-12-03
8647
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다