2017-10-04 8 views
2

私は両方のテーブルを作成する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 

このクエリは、各SITA(30 SITAがある)、各MARKET_SEGMENTで2017年1月1日から2017年8月31日に各日付を持つテーブルを与え(18明確Market_segmentsが、各SITAのdoesnがありますすべての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個のセグメントのテーブルを提供します。

今、私が望むのは、各SITAと各Market_Segment(各日付は30 x 18行)と一緒に2017-01-01から2017-08-31までの各日付を持つ表です最初のクエリの列も。 B、C、部屋、RNとしてのAMRoom、AMTRoom as Rev.

もちろん、すべての日付とmarket_Segment/Segの組み合わせが最初の表にないので、これらの代わりにRNとRevを0として出力したい、C、部屋は各SITAで固定されています(固定値のために別の結合が必要ですか?)

私は必要なものが意味をなさないことを願っています。どんな助けもありがとう!次に、2つのクエリのサンプルデータをそれぞれ示します。

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は2番目のqeuryのSEGと同じですか?私はその関係ですか?サンプル表やデータなしで言うのは難しいです。 –

+0

はい、最初のクエリのMarket_segmentは2番目のクエリのSEGと同じです@RaymondNijland – Sorath

答えて

2

あなたのSEGリストをdistinct sita, B, C, Rooms, datearrivedcross join、およびleft 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

関連する問題