如何编写查询?

Séb*_*ien 3 sql sql-server

我有一个包含客户的表(此表的目标是能够添加没有DB-Update的字段).该表如下所示:

CustId     Property     PropertyValue  

1          Name         Smith  
1          Email        smith@gmail.com  
2          Name         Donalds  
2          Email        donalds@gmail.com  
3          Name         john
Run Code Online (Sandbox Code Playgroud)

(客户3在表格中没有"电子邮件"条目)

预期结果:我希望每个客户端获得一行(Mail),如果客户没有电子邮件,则仍然显示一行为NULL.

CustId     Property     PropertyValue  

1          Email        smith@gmail.com  
2          Email        donalds@gmail.com  
3          Email        NULL
Run Code Online (Sandbox Code Playgroud)

有人解决方案吗?

M.A*_*Ali 5

查询1

Select t1.CustId 
     , ISNULL(t2.Property ,'Email') AS Property 
     , t2.PropertyValue
FROM TableName t1 
LEFT JOIN TableName t2 ON t1.CustId = t2.CustId
                      AND t2.Property = 'Email'
WHERE t1.Property = 'Name'
Run Code Online (Sandbox Code Playgroud)

结果集1

?????????????????????????????????????????
? CustId ? Property ?   PropertyValue   ?
?????????????????????????????????????????
?      1 ? Email    ? smith@gmail.com   ?
?      2 ? Email    ? donalds@gmail.com ?
?      3 ? Email    ? NULL              ?
?????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

查询2

对更可读的结果集的另一个查询看起来应该像....

Select t1.CustId 
     , t1.PropertyValue [CustomerName]
     , t2.PropertyValue [CustomerEmail]
FROM TableName t1 
LEFT JOIN TableName t2 ON t1.CustId = t2.CustId
                      AND t2.Property = 'Email'
WHERE t1.Property = 'Name'
Run Code Online (Sandbox Code Playgroud)

结果集2

?????????????????????????????????????????????
? CustId ? CustomerName ?   CustomerEmail   ?
?????????????????????????????????????????????
?      1 ? Smith        ? smith@gmail.com   ?
?      2 ? Donalds      ? donalds@gmail.com ?
?      3 ? john         ? NULL              ?
?????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)