2011-02-14 75 views
1

我有查询JOIN没有双重价值

SELECT frst.Date,t1.Value 
from 
[ArchiveAnalog] frst 
LEFT JOIN 
    (SELECT Date,Value FROM 
    [ArchiveAnalog] scnd 
    WHERE scnd.ID = 1) t1 
    ON t1.Date = frst.Date 

order by frst.Date 

但加入插入值,如果我做GROUP BY frst.Date,我有第二次(不与主节点组)

错误,我不能使用t1值与它。

如何在不添加额外行的情况下进行此JOIN?

马丁我想显示完整的日期和值只有当ID = 1,还那么我想补充T2值列等喜欢这里:

SELECT frst.Date,t1.Value,t2.Value 
from 
[ArchiveAnalog] frst 
LEFT JOIN 
    (SELECT Date,Value FROM 
    [ArchiveAnalog] scnd 
    WHERE scnd.ID = 1) t1 
    ON t1.Date = frst.Date 
LEFT JOIN 
(SELECT Date,Value FROM 
[ArchiveAnalog] scnd 
WHERE scnd.ID = 2) t2 
ON frst.Date = t2.Date 

在这里我有X2附加行:S采用将值加倍,所以我需要以某种方式对它们进行分组。

+0

因此,如果在'[ArchiveAnalog] scnd`中出现2个匹配的特定日期,您想要使用哪一行?如果您提供一些示例数据可能会更容易。不知道你在这里试图做什么,并且可能不需要自连接。 – 2011-02-14 08:23:52

回答

1

这是否做你所需要的?

SELECT Date , 
     MAX(CASE WHEN ID=1 THEN Value END) AS val1, 
     MAX(CASE WHEN ID=2 THEN Value END) AS val2 
FROM [ArchiveAnalog] 
WHERE ID IN (1,2) /*<-- Not sure if you need this line without seeing your data*/ 
GROUP BY Date 
+0

是的)这个解决方案好多了 – Cynede 2011-02-14 08:40:15

1

您在主查询中需要DISTINCT(如果您需要t1中最多有一行)或GROUP BY。如果您使用GROUP BY,则需要汇总t1.Value(例如总和,连接等)。