我有两个Sql Server 2012表," Person"和"报告"。下表列出了每个表的说明:
人员表(列名:数据类型):
PersonID: bigint
Prefix: tinyint
FirstName: nvarchar(50)
LastName: nvarchar(50)
Suffix: nvarchar(15)
JobTitle: nvarchar(50)
WorkPhoneNumber: nvarchar(25)
Email: nvarchar(50)
注意:" Prefix
" Person表中的列引用另一个名为" SupportCategory
";这个数值对应于先生"," Ms。" ...等。
报告表(列名:数据类型):
ReportID: bigint
ReportName: nvarchar(150)
ExecutiveApproved: bigint
ManagerApproved: bigint
StaffApproved: bigint
LegalApproved: bigint
AccountingApproved: bigint
ReportStorageDirectory: nvarchar(100)
CreatedBy: bigint
CreatedDAte: DateTime
您是否可以指定以格式" [LastName] + ' ' + ISNULL([Suffix], '') + ', ' + [Prefix] + ' ' + [FirstName]
"格式获取全名所需的查询? for" ExecutiveApproved, ManagerApproved, StaffApproved, LegalApproved, AccountingApproved, and CreatedBy
"?所需的结果如下:
|ReportID|ReportName|ExecutiveApproved|ManagerApproved|StaffApproved|LegalApproved|AccountingApproved|CreatedBy|CreatedDate
答案 0 :(得分:1)
只是一个简单的连接:
select r.ReportID,
r.ReportName,
p1.LastName + ' ' + ISNULL(c1.Suffix, '') + ', ' + c1.Code + ' ' + p1.FirstName as ExecutiveApproved,
p2.LastName + ' ' + ISNULL(c2.Suffix, '') + ', ' + c2.Code + ' ' + p2.FirstName as ManagerApproved,
p3.LastName + ' ' + ISNULL(c3.Suffix, '') + ', ' + c3.Code + ' ' + p3.FirstName as StaffApproved,
p4.LastName + ' ' + ISNULL(c4.Suffix, '') + ', ' + c4.Code + ' ' + p4.FirstName as LegalApproved,
p5.LastName + ' ' + ISNULL(c5.Suffix, '') + ', ' + c5.Code + ' ' + p5.FirstName as AccountingApproved,
r.CreatedBy,
r.CreatedDate
from reports r
left join persons p1 on r.ExecutiveApproved = p1.PersonID
left join persons p2 on r.ManagerApproved = p2.PersonID
left join persons p3 on r.StaffApproved = p3.PersonID
left join persons p4 on r.LegalApproved= p4.PersonID
left join persons p5 on r.AccountingApproved = p5.PersonID
left join SupportCategory c1 on p1.Prefix = c1.Prefix
left join SupportCategory c2 on p2.Prefix = c2.Prefix
left join SupportCategory c3 on p3.Prefix = c3.Prefix
left join SupportCategory c4 on p4.Prefix = c4.Prefix
left join SupportCategory c5 on p5.Prefix = c5.Prefix
答案 1 :(得分:1)
您基本上必须从Report表到Person执行一系列JOIN,每个列对应一个要转换为名称的列。使用LEFT JOIN,因为Person的每个连接副本只匹配其中一列。为了多次加入同一个表,您必须使用别名。然后使用别名选择名称。基本形式将是这样的:
SELECT ReportID, ReportName,
(executive.LastName + ' ' + ISNULL([executive.Suffix], '') + ', ' + executive.Prefix + ' ' + executive.FirstName) AS ExecutiveName,
<repeat for each of the other columns>
FROM Report
LEFT JOIN Person as executive ON Person.id = Report.ExecutiveApproved
<repeat for each of the other columns>