【发布时间】:2018-03-15 17:42:49
【问题描述】:
我有两个查询,它们都创建了我想交叉连接的表。
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
这个查询给出了一个表,其中每个日期从 2017-01-01 到 2017-08-31,每个 SITA(有 30 个 SITA)和每个 Market_segment(有 18 个不同的 Market_segment,但每个 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 年 1 月 1 日到 2017 年 8 月 31 日,每个 SITA 和每个 Market_Segment(因此每个日期将有 30 x 18 行)以及所有其他列从第一个查询开始; B、C、Rooms、StayDays 为 RN、AMTRoom 为 Rev.
当然,由于所有日期和 market_Segment/Seg 组合不在第一个表中,我只想将 RN 和 Rev 输出为 0,但 B、C、Rooms 对于每个 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
【问题讨论】:
-
您能否为这个问题提供一些数据。我不关注你。
-
不要认为你想在这里使用 CROSS JOIN 而是使用 LEFT 或 RIGHT JOIN... 第一个查询中的 Market_segment 与第二个查询中的 SEG 相同吗?我的意思是这种关系?没有示例表和数据很难说。
-
是的,第一个查询中的 Market_segment 与第二个查询中的 SEG 相同 @RaymondNijland
-
我认为您正在使用数据库 SQL-server,因为您的查询中没有 [dbo]。
-
是的,我是。 @RaymondNijland
标签: sql-server join cross-join