Sql server 2008 Sql Server中的自连接+左连接
我有一个表,可以存储不同的测量值,并将类型作为相关列来存储测量类型 下面是一个包含数据的示例表 我能够自动加入表格,根据日期获得ht和wt值。我的要求是,我还需要所有日期的wt值,即使该日期的ht不在表中 样本结果 编辑:我尝试了下面的查询,但它只返回第一行Sql server 2008 Sql Server中的自连接+左连接,sql-server-2008,join,Sql Server 2008,Join,我有一个表,可以存储不同的测量值,并将类型作为相关列来存储测量类型 下面是一个包含数据的示例表 我能够自动加入表格,根据日期获得ht和wt值。我的要求是,我还需要所有日期的wt值,即使该日期的ht不在表中 样本结果 编辑:我尝试了下面的查询,但它只返回第一行 SELECT ta.uid, ta.value as 'wt', lta.value as 'ht', ta.date,ta.id as lftid, lta.id as rtid FROM [test].[dbo].[tbl
SELECT
ta.uid, ta.value as 'wt', lta.value as 'ht', ta.date,ta.id as lftid, lta.id as rtid FROM
[test].[dbo].[tbl2] ta
LEFT JOIN [test].[dbo].[tbl2] Lta
ON ta.[date] = Lta.[date]
AND ta.[uid] = 11 WHERE
ta.type = 'wt'
AND Lta.type ='ht'
在where子句中引用右别名的事实实际上将左连接更改为内部连接。 要避免这种情况,请将where子句中的条件移动到on子句:
只需对查询进行一些更改,它就可以工作:
SELECT
ta.uid, ta.value as 'wt', lta.value as 'ht', ta.date,ta.id as lftid, lta.id as rtid FROM
[test].[dbo].[tbl2] ta
LEFT JOIN [test].[dbo].[tbl2] Lta
ON ta.[date] = Lta.[date]
AND ta.[uid] = 11 and ta.type<>Lta.type
WHERE
ta.type = 'wt'
AND isnull(Lta.type,'ht') ='ht'
它没有达到预期的效果。相反,它创建了超过预期的行,其中包含wt列中的所有mvalues。这正是我想要的。非常感谢。
SELECT
ta.uid, ta.value as 'wt', lta.value as 'ht', ta.date,ta.id as lftid, lta.id as rtid FROM
[test].[dbo].[tbl2] ta
LEFT JOIN [test].[dbo].[tbl2] Lta
ON ta.[date] = Lta.[date]
AND ta.[uid] = 11 and ta.type<>Lta.type
WHERE
ta.type = 'wt'
AND isnull(Lta.type,'ht') ='ht'