如何从sql查询中获取批准者的名称

时间:2015-06-12 15:37:15

标签: sql-server sql-server-2012

我有两个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

2 个答案:

答案 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>