2017-10-04 5 views
2

둘 다 내가 조인하고 싶은 테이블을 만드는 두 개의 쿼리가 있습니다.필요한 모든 열이 없을 때 어떻게 교차 결합을 수행합니까?

SELECT SITA, B, C, Rooms, Datearrived, Market_segment, StayDays as RN, AMTRoom as Rev 
    FROM [UKRMC].[dbo].[revenue] rev 
    JOIN [UKRMC].[dbo].[Contacts] contacts 
    ON rev.hotel_id = contacts.id 
    WHERE datearrived between '2017-01-01' and '2017-08-31' and C like '%GB%' 
    ORDER BY sita 

이 질의 (18 구별 Market_segments가 각각 SITA (존재 SITA 30)와 함께 각 Market_segment 2017년 8월 31일에 2017년 1월 1일 각 날짜를 가진 테이블을 제공하지만 각각 SITA 아무튼 모든 Market_segments를 갖고 있지 않으며 이것이 내 문제가있는 곳입니다.)

내 다음 질의는 다음과 같습니다

SELECT SEG  
FROM [UKRMC].[dbo].[Segmentation] 
WHERE SEG IN ('RAC', 'BIT', 'BIQ', 'CBI', 'TOF', 'QOF', 'BOA', 'FIT', 'LYO', 'RER', 'OTH', 'NRG', 'XXX', 'CRW', 'BGR', 'BGO', 'LGR', 'LGS') 

그래서 이것은 18 개 세그먼트의 테이블을 제공합니다.

자, 내가 원하는 건 2017-01-01부터 2017-08-31까지의 각 날짜와 각 SITA 및 각 Market_Segment (각 날짜는 30x18 행을 갖게 됨)와 함께 첫 번째 쿼리의 열 B, C, Rooms, StayDays as RN, AMTRoom as Rev.

물론 모든 날짜와 market_Segment/Seg 조합이 첫 번째 표에 없기 때문에 RN과 Rev를 0으로 출력하고 싶습니다. B , C, 방은 각 SITA마다 고정되어 있습니다 (고정 값에 대해 다른 조인이 필요합니까?)

내가 원하는 것을 이해하기를 바랍니다. 어떤 도움을 주셔서 감사합니다! 다음은 두 개의 쿼리에 대한 샘플 데이터입니다.

SITA B C Rooms Datearrived Market_segment RN Rev 
ABZPD PI GB 150 2017-01-01 TOF   2 45                  
ABZPD PI GB 150 2017-01-01 BAO   33 30.5                  
ABZPD PI GB 150 2017-01-01 BGR   11 50                  
ABZPD PI GB 150 2017-01-01 NRG   52 10                  
ABZPD PI GB 150 2017-01-01 CRW   20 90                  
ABZPD PI GB 150 2017-01-01 BIT   7 20                  
ABZPD PI GB 150 2017-01-01 CBI   0 40                  
ABZPD PI GB 150 2017-01-01 OTH   10 50                  
ABZPD PI GB 150 2017-01-01 BIQ   11 60                  
ABZPD PI GB 150 2017-01-01 RER   12 65  



**SEG** 
RAC  
BIT  
BIQ  
CBI  
TOF  
QOF  
BOA  
FIT  
LYO  
RER  
OTH  
NRG  
XXX  
CRW  
BGR  
BGO  
LGR  
LGS 
+0

당신이이 질문에 대한 일부 데이터를 보내 주시기 바랍니다 수 있습니다. 나는 너를 따라하지 않는다. –

+0

여기에 CROSS JOIN을 사용하고 싶지는 않지만 LEFT 또는 RIGHT JOIN을 사용한다고 생각하지 마십시오 ... 첫 번째 쿼리의 Market_segment는 두 번째 qeury의 SEG와 동일합니까? 그게 그 관계인가요? 예제 테이블과 데이터없이 말하기는 어렵습니다. –

+0

예, 첫 번째 쿼리의 Market_segment는 두 번째 쿼리의 SEG와 같습니다. @RaymondNijland – Sorath

답변

2

당신은 당신의 SEG 목록 distinct sita, B, C, Rooms, datearrivedleft join 원래 쿼리를 cross join해야합니다. 쿼리에서 열의 원본을 확인할 수 없으므로 테이블 t을 원래 쿼리로 처리하고 있습니다.

select 
    d.SITA 
    , d.B 
    , d.C 
    , d.Rooms 
    , d.Datearrived 
    , Market_segment = s.Seg 
    , Rn = isnull(t.rn,0) 
    , Rev = isnull(t.Rev,0) 
from (
    select distinct sita, B, C, Rooms, datearrived 
    from dbo.t -- whichever table has the above columns 
) d 
cross join (
    select SEG 
    from dbo.Segmentation 
    where SEG in ('RAC', 'BIT', 'BIQ', 'CBI', 'TOF', 'QOF', 'BOA', 'FIT', 'LYO', 'RER', 'OTH', 'NRG', 'XXX', 'CRW', 'BGR', 'BGO', 'LGR', 'LGS') 
) s 
left join dbo.t 
    on d.datearrived = t.datearrived 
and d.sita = t.sita 
and s.seg = t.market_segment 

rextester 데모 : http://rextester.com/WSFUO57652

반환 :

+-------+----+----+-------+-------------+----------------+----+-----+ 
| SITA | B | C | Rooms | Datearrived | Market_segment | Rn | Rev | 
+-------+----+----+-------+-------------+----------------+----+-----+ 
| ABZPD | PI | GB | 150 | 2017-01-01 | RAC   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | BIT   | 7 | 20 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | BIQ   | 11 | 60 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | CBI   | 0 | 40 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | TOF   | 2 | 45 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | QOF   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | BOA   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | FIT   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | LYO   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | RER   | 12 | 65 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | OTH   | 10 | 50 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | NRG   | 52 | 10 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | XXX   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | CRW   | 20 | 90 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | BGR   | 11 | 50 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | BGO   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | LGR   | 0 | 0 | 
| ABZPD | PI | GB | 150 | 2017-01-01 | LGS   | 0 | 0 | 
+-------+----+----+-------+-------------+----------------+----+-----+ 
+0

이 작품! 정말 고맙습니다! – Sorath

+0

@Sorath 도와 드리겠습니다! – SqlZim