首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列的T-SQL条件移位

列的T-SQL条件移位
EN

Stack Overflow用户
提问于 2015-07-09 21:19:32
回答 2查看 37关注 0票数 0

我目前有两个SQL查询的联合,结果是我的业务的组织结构图完整。查询如下:

代码语言:javascript
复制
SELECT [Boss].[dbo].[Persons].[PersonId]
  ,[FirstName]
  ,[MiddleName]
  ,[LastName]
  ,[Prefix]
  ,[Suffix]
  ,[Title]
  ,[CreateDate]
  ,[Boss].[dbo].[OrganizationPersons].[OrganizationId]
  ,[Boss].[dbo].[Organizations].[Name] AS [Region]
  ,Org2.Name AS [Division]
  ,Org3.Name AS [National]
FROM [Boss].[dbo].[Persons]
INNER JOIN [Boss].[dbo].[OrganizationPersons]
ON [Boss].[dbo].[Persons].[PersonId]=[Boss].[dbo].[OrganizationPersons].[PersonId]
INNER JOIN [Boss].[dbo].[Organizations]
ON [Boss].[dbo].[OrganizationPersons].[OrganizationId]=[Boss].[dbo].[Organizations].[OrganizationId]
INNER JOIN [Boss].[dbo].[OrganizationVersions]
ON [Boss].[dbo].[Organizations].[OrganizationVersionId]=[Boss].[dbo].[OrganizationVersions].[OrganizationVersionId]
LEFT OUTER JOIN [Boss].[dbo].[Organizations] Org2
ON Org2.OrganizationId=[Boss].[dbo].[Organizations].[ParentOrganizationId]
LEFT OUTER JOIN [Boss].[dbo].[Organizations] Org3
ON Org3.OrganizationId=Org2.ParentOrganizationId
WHERE [Boss].[dbo].[OrganizationVersions].[EndEffectiveDate] is NULL
UNION
SELECT [Boss].[dbo].[Persons].[PersonId]
  ,[FirstName]
  ,[MiddleName]
  ,[LastName]
  ,[Prefix]
  ,[Suffix]
  ,[Title]
  ,[CreateDate]
  ,[Boss].[dbo].[OrganizationManagers].[OrganizationId]
  ,[Boss].[dbo].[Organizations].[Name] AS [Region]
  ,Org2.Name AS [Division]
  ,Org3.Name AS [National]
FROM [Boss].[dbo].[Persons]
INNER JOIN [Boss].[dbo].[OrganizationManagers]
ON [Boss].[dbo].[Persons].[PersonId]=[Boss].[dbo].[OrganizationManagers].[PersonId]
INNER JOIN [Boss].[dbo].[Organizations]
ON [Boss].[dbo].[OrganizationManagers].[OrganizationId]=[Boss].[dbo].[Organizations].[OrganizationId]
INNER JOIN [Boss].[dbo].[OrganizationVersions]
ON [Boss].[dbo].[Organizations].[OrganizationVersionId]=[Boss].[dbo].[OrganizationVersions].[OrganizationVersionId]
LEFT OUTER JOIN [Boss].[dbo].[Organizations] Org2
ON Org2.OrganizationId=[Boss].[dbo].[Organizations].[ParentOrganizationId]
LEFT OUTER JOIN [Boss].[dbo].[Organizations] Org3
ON Org3.OrganizationId=Org2.ParentOrganizationId
WHERE [Boss].[dbo].[OrganizationVersions].[EndEffectiveDate] is NULL

..。而且效果很好。除担任监督职务的人员外。下面是输出的样子(在本例中,Servo报告给Robinson,谁向Forrester报告):

代码语言:javascript
复制
PersonID  FirstName  LastName  ... Region    Division  National
1         Tom        Servo     ... SOL       Deep-13   National
2         Joel       Robinson  ... Deep-13   National  NULL
3         Clayton    Forrester ... National  NULL      NULL

有没有办法强迫Joel‘Deep 13和National像Servo(即空/深-13/National)一样排列,Forrester也像Servo(即NULL/NULL/National)一样排队?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-09 21:31:05

代码语言:javascript
复制
case
    when Org2.Name is not null and Org3.Name is not null then Org1.Name
    else null
end as Region,
case
    when Org3.Name is not null then Org2.Name
    when Org2.Name is not null then Organizations.Name
    else null
end as Division,
coalesce(Org3.Name, Org2.Name, Organizations.Name) as National
票数 0
EN

Stack Overflow用户

发布于 2015-07-09 21:38:55

首先,在[Boss].[dbo].[Organizations] Org1上设置一个别名,因为您将需要它。

然后将最后3项选择更改为:

代码语言:javascript
复制
CASE WHEN Org2.Name IS NULL THEN NULL ELSE Org1.Name END AS Region
CASE WHEN Org2.Name IS NULL THEN NULL
     WHEN Org3.Name IS NULL THEN Org1.Name
     ELSE Org2.Name
END AS Division,
COALESCE (Org3.Name, Org2.Name, Org1.Name) AS National
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31328420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档