我必须合并两个查询:
查询1-一个简单的内部连接,其中查询:
Select t1.c1, t1.c2, t1.c3, t2.c1
from s1.t2 t2
inner join s1.t1 t1 on t2.c6 = t1.c6
where t2.c5 >= '2014-01-01'
and t2.c5 >= '2014-01-01'
and t1.c4 = 'P' 当然,这会返回一个包含4列的表。让我在这里画出来:
+----+----+----+-------+
| C1 | C2 | C3 | T2.C1 |
+----+----+----+-------+
| | | | |查询2-使用With,然后使用“分区by”语句删除重复项:
WITH all_col1 (ONE, TWO) AS
(
SELECT col1, col2
FROM Schema1.Table1
UNION
SELECT col1, col2
FROM Schema2.Table2
UNION
SELECT col1, col2
FROM Schema2.Table3
)
SELECT *
FROM (
SELECT ONE, TWO,
ROW_NUMBER() OVER(PARTITION BY ONE ORDER BY ONE) duplicate_count
FROM all_col1
) all_col1_w_duplicat_count
WHERE duplicate_count = 1 这将返回两个列,删除所有重复项(也就是说,如果第1列有重复项,则额外的行将显式删除):
+-----+-----+
| ONE | TWO |
+-----+-----+
| | |因此,我想看到的是第一个查询和第二个查询的组合,其中两个被添加到一个匹配C1的表中:
+------+----+----+-------+-----+
| C1 | C2 | C3 | T2.C1 | TWO |
|(ONE) | | | | |
+------+----+----+-------+-----+
| | | | | |因此,我尝试了INTERSECT,添加了占位符行。空回来了。
我也尝试过让查询1成为CTE,然后加入这两者--尝试了无数错误。
到目前为止,我能想到的最好的方法是将查询1与select语句中的查询2连接起来:
--ALL COL1 WITH beginning
WITH all_col1 (ONE, TWO) AS
(
SELECT col1, col2
FROM Schema1.Table1
UNION
SELECT col1, col2
FROM Schema2.Table2
UNION
SELECT col1, col2
FROM Schema2.Table3
)
--ALL COL1 SELECT duplicate_count
SELECT *
FROM (
SELECT ONE, TWO,
ROW_NUMBER() OVER(PARTITION BY ONE ORDER BY ONE) duplicate_count
FROM all_col1
-- added join opperation
join (
--SELECT from query 1
Select t1.c1, t1.c2, t1.c3, t2.c1
from s1.t2 t2
inner join s1.t1 t1 on t2.c6 = t5.c6
where t2.c5 >= '2014-01-01'
and t2.c5 >= '2014-01-01'
and t1.c4 = 'P'
-- finish join opperation
) as query1
on all_col1.ONE = query1.c1 -- <----MOST IMPORTANT PART
-- finsih ALL COL1
) all_col1_w_duplicat_count
WHERE duplicate_count = 1 不幸的是,这并没有给出每个查询的第一列连接的结果,就像用on all_col1.ONE = t1.c1询问的结果一样
相反,它似乎只是给了我与all_col1。
我对sql几乎一无所知,为了正确地将这两个查询连接在一起,我需要学习什么?
发布于 2017-05-16 17:01:18
考虑加入两个派生表( FROM和JOIN子句中的子查询),因为重复计数包括两个表,而不只是一个表:
...
SELECT q.c1, q.c2, q.c3, q.t2_c1, a.[TWO]
FROM
(
SELECT *
FROM (
SELECT ONE, TWO,
ROW_NUMBER() OVER(PARTITION BY ONE ORDER BY ONE) duplicate_count
FROM all_col1
) sub
WHERE sub.duplicate_count = 1
) a
INNER JOIN
(
SELECT t1.c1, t1.c2, t1.c3, t2.c1 as t2_c1
FROM s1.t2 t2
INNER JOIN s1.t1 t1 on t2.c6 = t5.c6
WHERE t2.c5 >= '2014-01-01'
AND t2.c5 >= '2014-01-01'
AND t1.c4 = 'P'
) q
ON a.ONE = q.c1https://stackoverflow.com/questions/44005501
复制相似问题