2011-02-14 7 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 
xxxx xxxx t1 Value를 사용하십시오.

추가 행을 추가하지 않고이 JOIN을 만들려면 어떻게해야합니까?

Martin 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 개의 추가 행이 있습니다. 값을 두 배로 늘리므로 어떤 식 으로든 모두 그룹화해야합니다.

+0

그래서 어떤 행을 사용 하시겠습니까? '[ArchiveAnalog] scnd'에 2 개의 일치 항목이있는 경우? 예제 데이터를 제공하면 더 쉬울 수도 있습니다. 여기서 무엇을하려고하는지 잘 모르거나 자기 조인이 필요하지 않을 수도 있습니다. –

답변

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

1

메인 쿼리에 DISTINCT (t1에 행이 하나 이상있는 경우) 또는 GROUP BY이 필요합니다. GROUP BY을 사용하는 경우 t1.Value (예 : 합계, 합치기 등)을 집계해야합니다.

관련 문제