2017-08-17 16 views
1

这个问题的一部分是以前回答,但我这里有一个更新的要求如何加入和枢轴,链接和组表

How to pivot, link and group a table with

我有一个表测试用的cols ID,父,名称,等级

CREATE TABLE [beta](
[Id] [int] IDENTITY(1,1) NOT NULL, 
[Parent] [int] NULL, 
[Name] [varchar](150) NOT NULL, 
[Level] [int] NULL, 
CONSTRAINT [PK_Beta] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 

示例内容是

Id Parent Name    Level 
1 NULL Clinical   1 
2 NULL Custom   1 
3 NULL Medicare   1 
4 NULL Validation  1 
5 1  Medicaid   2 
6 2  CD    2 
7 3  Specialty  2 
8 5  Fraud   3 
9 2  Institutional 3 
10 8  Professional  4 

Id是唯一的。有多达4个级别。每个Name可以通过Parent值追溯到级别1。 1级Parent总是NULL

我需要连接表的β-表[枚举]

CREATE TABLE [Enum](
[Id] [int] NOT NULL, 
[Enum] [Varchar] (6) NOT NULL, 
CONSTRAINT [PK_Enum] PRIMARY KEY CLUSTERED 
(
    [Id] ASC, 
    [Enum] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 

样品含量

Id Enum 
1 000001 
5 000001 
8 000001 
10 000001 
2 000002 
6 000002 

我想加入这两个表并检索结果如下图所示。结果显示它们与之相关的截然不同的Enum和所有level

Enum Level1 Level2 Level3 Level4  
000001 Clinical Medicaid Fraud Professional 
000002 Custom CD  NULL NULL  
............... 

回答

1

你可以试着转动像下面

select enum,[1] as Level1, [2] as Level2, [3] as Level3 , [4] as level4 
from 
(select E.enum, 
B.level,B.name from 
beta b join enum e 
on b.id=e.id)s 
pivot 
(max(Name) for level in ([1],[2],[3],[4])) 
p 

see live demo