SQL查询:从两个单独的行连接两个字段

cod*_*ama 1 sql left-join

我有以下两个表:

USER
FID  UID     VALUE
4    3       John
3    3    Doe
4    4       Jack
3    4       Russel
Run Code Online (Sandbox Code Playgroud)

应该相当清楚FID 3 = Surname,FID 4 = Name.

DATEDATA
UID  DATE  
3    1234
4    4321
Run Code Online (Sandbox Code Playgroud)

我想加入这两个表,所以我最终得到这样的东西:

UID  DATE  NAME   SURNAME
3    1234  John   Doe
4    4321  Jack   Russel
Run Code Online (Sandbox Code Playgroud)

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

UID  DATE  FULLNAME
3    1234  John Doe
4    4321  Jack Russel
Run Code Online (Sandbox Code Playgroud)

那里有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
Run Code Online (Sandbox Code Playgroud)

但这给了我这个:

UID  DATE  VALUE
3    1234  Doe
3    1234  John
4    4321  Russel
4    4321  Jack
Run Code Online (Sandbox Code Playgroud)

任何人?

jke*_*ley 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
Run Code Online (Sandbox Code Playgroud)

虽然这可以在first或last为NULL时给你一个NULL名称.在这种情况下,如果您可以接受用户在系统中只有一个名称或另一个名称的情况,您可能希望使用ISNULL将任一名称设为空字符串.