我试图基本上将两个输出的列合并为一行。
以下是一个例子:
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中以及视图中执行上述操作,因此任何涉及创建临时表的操作都不起作用。
在上述两种情况下,我都会在外部联接中的结束标记周围出现语法错误。
答案 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