2009-08-13 3 views
1

에서 두 개의 필드를 결합하는 :SQL 쿼리 : 나는 두 테이블 다음 한 두 개의 별도의 행

USER 
FID UID  VALUE 
4 3  John 
3 3 Doe 
4 4  Jack 
3 4  Russel 

그 FID 3 = 성 및 FID 4 = 이름 상당히 명확해야한다.

UID DATE NAME SURNAME 
3 1234 John Doe 
4 4321 Jack Russel 

또는 ... 양자 택일 ...

UID DATE FULLNAME 
3 1234 John Doe 
4 4321 Jack Russel 

모든 SQL 지도자를 :이 같은 끝낼 수 있도록

DATEDATA 
UID DATE 
3 1234 
4 4321 

나는이 두 테이블을 조인 할 저 밖에?

SELECT UID, DATE, VALUE 
    from DATEDATA as D 
    left join USER as U 
    on U.uid = D.uid where fid = 3 OR fid = 4 

을하지만 그 날이 제공 :

UID DATE VALUE 
3 1234 Doe 
3 1234 John 
4 4321 Russel 
4 4321 Jack 

사람을

이것은 내가 지금까지 가지고 무엇인가?

답변

6
SELECT D.UID, DATE, U.VALUE + ' ' + U2.Value as fullName 
from DATEDATA as D 
left join USER as U on U.uid = D.uid and U.fid = 3 
left join USER as U2 on U2.uid = D.uid and U2.fid = 4 

첫 번째 또는 마지막 값이 NULL 일 때마다 널 (NULL) 이름을 지정할 수도 있지만. 이 경우 사용자가 시스템에서 하나의 이름이나 다른 이름 만 가질 수있는 경우 ISNULL을 사용하여 이름을 빈 문자열로 만들 수 있습니다.

+0

나를 이길. 대신 별칭 "F"및 "L"USER 테이블에 대해 사용하지만 그렇지 않으면 - RD, 이것은 원하는 쿼리입니다. –

+0

완벽합니다. MySQL을 사용하기 때문에 "concat"을 사용해야했습니다. – coderama

+0

field1 + ''+ field2를 field3으로 지정하면 결과가 0이됩니다. – anurodh

0
SELECT A.UID, DATEDATA.DATE, A.VALUE, B.VALUE from DATEDATA, USER A, USER B 
WHERE A.UID = B.UID AND A.FID = 3 AND B.FID = 4 AND DATEDATA.UID = A.UID 
0
select 
    D.UID 
, D.DATE 
, isnull(U.VALUE, '') 'firstName' 
, isnull(U2.VALUE, '') 'surName' 
from 
    DateData D 
left join User U on U.uid = D.uid and U.fid = 3 
left join User U2 on U2.uid = D.uid and U2.fid = 4 
0

당신은 다음과 같은 것을 사용할 수 있습니다. 항상 이름이 있다고 가정합니다. 항상 필드가 있고 이름이 아닌 경우 첫 번째 필드에서 첫 번째 필드를 만들고 조인을 다시 조정하십시오. 가치를 결코 보장 할 수 없다면 저희에게 알려 주시면 더 열심히 해결해 드리겠습니다.

select d.uid,COALESCE(d.date,'none entered'),COALESCE(frst.value,'') as NAME,COALESCE(lst.value,'') as SURNAME 
from 
user frst (NOLOCK) 
left join user lst (NOLOCK) on lst.uid=frst.uid 
left join datedata d (NOLOCK) on d.uid = frst.uid 
where 
frst.fid=4 
AND lst.fid=3