T-SQL两个子查询或任意静态值的全外连接?

时间:2017-09-08 05:39:10

标签: sql-server join

我试图基本上将两个输出的列合并为一行。

以下是一个例子:

SELECT * FROM (SELECT 'Today' AS Txt) t1
FULL OUTER JOIN (SELECT * FROM (SELECT GETDATE() AS D) t2)
-- desired result is one row with a 'Txt' column with value 'Today' and a 'D' column with the result of the GETDATE function

另一个:

SELECT * FROM (SELECT * FROM dbo.myTableFunc()) t1 -- returns 5 rows
FULL OUTER JOIN (SELECT * FROM (SELECT * FROM dbo.myOtherTableFunc())) t2 -- also returns 5 rows

我无法弄清楚如何做的是在两个子查询上执行“外连接”。在第一个例子中,我基本上试图将两个标量的结果合并为一行结果。在第二个我试图拿两个表,每个表有五行,并组合他们的列,两个表中的数据之间没有任何关系。

我正在尝试在UDF中以及视图中执行上述操作,因此任何涉及创建临时表的操作都不起作用。

在上述两种情况下,我都会在外部联接中的结束标记周围出现语法错误。

1 个答案:

答案 0 :(得分:1)

您只是错过了加入条件。在第一个示例中,您的连接条件是“始终”,或1 = 1:

SELECT * FROM (SELECT 'Today' AS Txt) t1
FULL OUTER JOIN (SELECT * FROM (SELECT GETDATE() AS D) t2) t2 on 1=1

在第二个例子中,你不希望每个数据集中的行之间存在任何关系 - 好吧,如果你想加入它们,那么就需要有一些关系,即使它是虚假的。使用这样的行号可以起作用(假设在两个表中都有一个名为Id的唯一列):

select * from (
    select row_number() over (order by Id asc) rn, * from dbo.myTableFunc()
) t1
full join (
    select row_number() over (order by Id asc) rn, * from dbo.myOtherTableFunc()
) t2 on t1.rn=t2.rn