我有两个问题,Q1和Q2。
Q1为每个演示和日期生成一个结果。
Q2为每个演示,日期和网站生成一个结果。
此外,来自Q2的给定演示和站点的日期与Q1有一些重叠,
但是Q1的所有日期都不会出现,第二季度可能会有一些新的日期在第一季度不存在。
我想要做的是生成一个结果表,其中Q1的结果基本上重复(行下的行)等于Q2中的站点数。
Q2的结果应该在第二列,并在日期和演示上匹配。
如果Q2的该站点中不存在Q1中的日期,则该条目应为零或为空。我知道这可以通过连接实现,但我不能让它工作。我试过了 -
select a.result, b.site, b.result from
(Q1) as a right join (Q2) as b on a.demo = b.demo and a.date=b.date
但这会产生一些奇怪的结果。对于Q2的每个站点,a.result的条目是不同的,尽管它们不应该是。
编辑 - 这是我正在尝试做的事情 -
Q1 -
demo | date
------------------------------
1 | 10/31/2013
1 | 11/01/2013
2 | 11/02/2013
Q2 -
demo | site | date
------------------------------
1 | A | 10/31/2013
1 | A | 11/01/2013
2 | B | 11/01/2013
2 | B | 11/02/2013
期望的结果 -
demo | date | site
---------------------------------------
1 | 10/31/2013 | A
1 | 11/01/2013 | A
2 | 11/02/2013 | null
1 | 10/31/2013 | null
1 | 11/01/2013 | B
2 | 11/02/2013 | B
答案 0 :(得分:0)
使用内部联接而不是右联接
select a.result, b.site, b.result from (Q1) as a
inner join (Q2) as b on a.demo = b.demo and a.date=b.date
答案 1 :(得分:0)
根据您的说明,您可以通过此查询获得该结果。
SELECT
a.demo,
a.date,
b.site
FROM (Q1) a
LEFT JOIN (Q2) a ON b.date = a.date
在结果列表中对其进行排序将需要子查询中的更多信息。您需要使用Row_Number()之类的函数(假设您正在使用MSSQL)在子查询中生成唯一ID以用于排序。