tsd*_*ter 5 sql sql-server join sql-server-2005
我在联系人详细信息数据库中有行,如下所示:
contactID - bioID - AddressLine1 - City
393 1 1 nowhere st toronto
3921 1 2 somewhere st vancouver
3231 2 1 anywhere rd barrie
1122 2 2 overthere st halifax
Run Code Online (Sandbox Code Playgroud)
我目前正在内部加入一个带有列firstname, lastname等的生物表,结果如下所示:
bioid firstname lastname addressline1 city
1 some guy 1 nowhere st toronto
1 some guy 2 somewhere st vancouver
2 that girl 1 anywhere rd barrie
2 that girl 2 overthere st halifax
Run Code Online (Sandbox Code Playgroud)
所以我基本上每个生物获得2行.无论如何我可以选择这一行作为这样的一行:
bioid firstname lastname addressline1x1 cityx1 addressline1x2 cityx2
1 some guy 1 nowhere st toronto 2 somewhere st vancouver
2 that girl 1 anywhere rd barrie 2 overthere st halifax
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
谢谢,托马斯
编辑:
非常感谢Denis和Justin,我能够解决这个问题.但是,现在我有了另一个.
我想实际选择地址为1字段,如:
bioid firstname lastname primary address secondary address
1 some guy 1 nowhere st, toronto 2 somewhere st, vanvouver
2 that girl 1 anywhere rd, barrie 2 overthere st, halifax
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过连接以下列来实现:
cd1.addressline1 + ', ' cd1.city AS 'Primary Address'
Run Code Online (Sandbox Code Playgroud)
但是,某些字段在记录中是空的,例如,如果没有辅助地址 - 那么我怎么能这样做才能使辅助地址不输出','?字段是空字符串,而不是NULL值.
再次感谢!
编辑:我有这个工作使用:
STUFF(COALESCE(', ' + NULLIF(C1.[AddressLine1], ''), '') +
COALESCE(', ' + NULLIF(C1.[AddressLine2], ''), '') +
COALESCE(', ' + NULLIF(C1.[City], ''), '') +
COALESCE(', ' + NULLIF(C1.[State], ''), '') +
COALESCE(', ' + NULLIF(C1.[Country], ''), '') +
COALESCE(', ' + NULLIF(C1.[ZipCode], ''), ''),1, 1, '') AS 'Primary Address'
Run Code Online (Sandbox Code Playgroud)
;with cd as(
select *, rn = dense_rank(partition by bioid order by addressline, city)
from ContactDetails cd
)
select c.bioid, c.firstname, c.lastname, cd1.AddressLine, cd1.City, cd2.AddressLine, cd2.City, cd3.AddressLine, cd3.City
from Contact c
left join cd cd1 on c.bioid = cd1.bioid and cd1.rn = 1
left join cd cd2 on c.bioid = cd2.bioid and cd2.rn = 2
left join cd cd3 on c.bioid = cd3.bioid and cd3.rn = 3
Run Code Online (Sandbox Code Playgroud)