我有两个查询: Q1和Q2。
Q1为每个演示和日期生成一个结果。
Q2为每个演示、日期和站点生成一个结果。
此外,来自Q2的给定演示和站点的日期将与Q1有一些重叠,
但并不是所有来自Q1的日期都在那里,甚至在Q2中可能会有一些Q1中没有的新日期。
我想要做的是生成一个结果表,该表的Q1结果基本上重复(行下的行)等于Q2中的站点数量。
来自Q2的结果应该在第二列,并且日期和演示相匹配。
如果Q2站点中不存在Q1格式日期,则条目应为零或null。我知道这可以通过joins来实现,但是我不能让它工作。我试过了-
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/2013Q2 -
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 发布于 2013-10-31 10:42:13
使用内部连接而不是右连接
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发布于 2013-10-31 10:46:22
根据您的说明,您可以使用此查询获得该结果。
SELECT
a.demo,
a.date,
b.site
FROM (Q1) a
LEFT JOIN (Q2) a ON b.date = a.date但是,在结果列表中对其进行排序将需要在子查询中提供更多信息。您需要使用像Row_Number()这样的函数(假设您正在使用MSSQL)在子查询中生成惟一的in,以用于排序。
发布于 2013-10-31 12:12:08
以下是我认为您所要求的示例:
SELECT M.demo, M.date, M.site FROM
(
SELECT 2 AS FromQuery, Q2.demo, Q2.date, Q2.site
FROM Q2
UNION
SELECT 1 AS FromQuery, Q1.demo, Q1.date, null AS site
FROM Q1
) AS M
ORDER BY M.FromQueryhttps://stackoverflow.com/questions/19697387
复制相似问题