2009-08-13 66 views
1

兩個字段我有以下兩個表:SQL查詢:接合由兩個單獨的行

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

應該是相當清楚的是FID 3 =姓,和FID 4 =名稱。

DATEDATA 
UID DATE 
3 1234 
4 4321 

我想加入這兩個表,讓我結束了這樣的事情:

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

或者......或者......

UID DATE FULLNAME 
3 1234 John Doe 
4 4321 Jack Russel 

任何SQL大師在那裏?

這是我到目前爲止有:

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,這是你想要的查詢。 – 2009-08-13 18:53:13

+0

完美,除了我不得不使用「concat」,因爲我使用的是MySQL。 – coderama 2009-08-13 19:22:57

+0

field1 +''+ field2作爲field3的結果爲0 – anurodh 2011-08-19 11:44:03

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