Sql server 2008 Sql Server中的自连接+左连接

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

我有一个表,可以存储不同的测量值,并将类型作为相关列来存储测量类型

下面是一个包含数据的示例表

我能够自动加入表格,根据日期获得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].[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'