如何将5组数据从一列变成5个不同的列
How to turn 5 sets of data from one column into 5 different columns
我现在的table是这样的
CPNT_ID
Org_Id
Stud ID
Compl_Dte
Trainee
Org001
101010
Nov 13, 2016
SvcTech
Org001
101010
Nov 13, 2016
CrewChief
Org001
101010
Nov 13, 2016
Trainee
Org001
101013
Nov 13, 2016
SvcTech
Org001
101013
Nov 13, 2016
Trainee
Org002
101011
Nov 13, 2016
SvcTech
Org002
101011
Nov 13, 2016
Trainee
Org002
101012
Nov 13, 2016
如果我正在查看一个组织,这会起作用,但如果我需要查看多个组织,我需要 table 看起来像这样。我没有足够的声誉来聊天
Organization
Trainee
SvcTech
CrewChief
SvcCoord
Appr
Org001
2
2
1
0
0
Org002
2
1
0
0
0
这是我的代码
select
cpnt.cpnt_id,
s.ORG_ID,
pc.stud_id,
pc.compl_dte
from
pa_stud_program sp,
pa_program p,
pa_student s,
pa_stud_cpnt pc,
ps_program_type pt,
pa_cpnt cpnt
WHERE p.PROGRAM_SYS_GUID = sp.PROGRAM_SYS_GUID
and pc.compl_dte is not null
and cpnt.cpnt_id in ('Trainee','SvcTech','CrewChief','SvcCoord','Appr')
and s.jp_id in ('1801','1805','1810','1811')
and s.EMP_STAT_ID = 'Active'
AND cpnt.CPNT_TYP_ID = p.CPNT_TYP_ID
AND cpnt.CPNT_ID = p.CPNT_ID
AND cpnt.REV_DTE = p.REV_DTE
AND pc.STUD_ID = sp.STUD_ID
AND sp.stud_id = s.STUD_ID
AND pc.CPNT_ID = sp.CPNT_ID
AND pc.CPNT_TYP_ID = sp.CPNT_TYP_ID
AND pc.REV_DTE = sp.REV_DTE
AND pc.seq_num = sp.seq_num
AND pt.PROGRAM_TYPE_ID = p.PROGRAM_TYPE
/** and s.PERSON_ID_EXTERNAL in [UserSearch]*/
您可以使用 case when 旋转 table,并在外层分组。
SQL 代码如下:
select ORG_ID as Organization
,sum(case when cpnt_id = 'Trainee' then 1 else 0 end) as Trainee
,sum(case when cpnt_id = 'SvcTech' then 1 else 0 end) as SvcTech
,sum(case when cpnt_id = 'CrewChief' then 1 else 0 end) as CrewChief
,sum(case when cpnt_id = 'SvcCoord' then 1 else 0 end) as SvcCoord
,sum(case when cpnt_id = 'Appr' then 1 else 0 end) as Appr
from (
select
cpnt.cpnt_id,
s.ORG_ID,
pc.stud_id,
pc.compl_dte
from
pa_stud_program sp,
pa_program p,
pa_student s,
pa_stud_cpnt pc,
ps_program_type pt,
pa_cpnt cpnt
WHERE p.PROGRAM_SYS_GUID = sp.PROGRAM_SYS_GUID
and pc.compl_dte is not null
and cpnt.cpnt_id in ('Trainee','SvcTech','CrewChief','SvcCoord','Appr')
and s.jp_id in ('1801','1805','1810','1811')
and s.EMP_STAT_ID = 'Active'
AND cpnt.CPNT_TYP_ID = p.CPNT_TYP_ID
AND cpnt.CPNT_ID = p.CPNT_ID
AND cpnt.REV_DTE = p.REV_DTE
AND pc.STUD_ID = sp.STUD_ID
AND sp.stud_id = s.STUD_ID
AND pc.CPNT_ID = sp.CPNT_ID
AND pc.CPNT_TYP_ID = sp.CPNT_TYP_ID
AND pc.REV_DTE = sp.REV_DTE
AND pc.seq_num = sp.seq_num
AND pt.PROGRAM_TYPE_ID = p.PROGRAM_TYPE
) as a
group by ORG_ID
我现在的table是这样的
CPNT_ID | Org_Id | Stud ID | Compl_Dte |
---|---|---|---|
Trainee | Org001 | 101010 | Nov 13, 2016 |
SvcTech | Org001 | 101010 | Nov 13, 2016 |
CrewChief | Org001 | 101010 | Nov 13, 2016 |
Trainee | Org001 | 101013 | Nov 13, 2016 |
SvcTech | Org001 | 101013 | Nov 13, 2016 |
Trainee | Org002 | 101011 | Nov 13, 2016 |
SvcTech | Org002 | 101011 | Nov 13, 2016 |
Trainee | Org002 | 101012 | Nov 13, 2016 |
如果我正在查看一个组织,这会起作用,但如果我需要查看多个组织,我需要 table 看起来像这样。我没有足够的声誉来聊天
Organization | Trainee | SvcTech | CrewChief | SvcCoord | Appr |
---|---|---|---|---|---|
Org001 | 2 | 2 | 1 | 0 | 0 |
Org002 | 2 | 1 | 0 | 0 | 0 |
这是我的代码
select
cpnt.cpnt_id,
s.ORG_ID,
pc.stud_id,
pc.compl_dte
from
pa_stud_program sp,
pa_program p,
pa_student s,
pa_stud_cpnt pc,
ps_program_type pt,
pa_cpnt cpnt
WHERE p.PROGRAM_SYS_GUID = sp.PROGRAM_SYS_GUID
and pc.compl_dte is not null
and cpnt.cpnt_id in ('Trainee','SvcTech','CrewChief','SvcCoord','Appr')
and s.jp_id in ('1801','1805','1810','1811')
and s.EMP_STAT_ID = 'Active'
AND cpnt.CPNT_TYP_ID = p.CPNT_TYP_ID
AND cpnt.CPNT_ID = p.CPNT_ID
AND cpnt.REV_DTE = p.REV_DTE
AND pc.STUD_ID = sp.STUD_ID
AND sp.stud_id = s.STUD_ID
AND pc.CPNT_ID = sp.CPNT_ID
AND pc.CPNT_TYP_ID = sp.CPNT_TYP_ID
AND pc.REV_DTE = sp.REV_DTE
AND pc.seq_num = sp.seq_num
AND pt.PROGRAM_TYPE_ID = p.PROGRAM_TYPE
/** and s.PERSON_ID_EXTERNAL in [UserSearch]*/
您可以使用 case when 旋转 table,并在外层分组。 SQL 代码如下:
select ORG_ID as Organization
,sum(case when cpnt_id = 'Trainee' then 1 else 0 end) as Trainee
,sum(case when cpnt_id = 'SvcTech' then 1 else 0 end) as SvcTech
,sum(case when cpnt_id = 'CrewChief' then 1 else 0 end) as CrewChief
,sum(case when cpnt_id = 'SvcCoord' then 1 else 0 end) as SvcCoord
,sum(case when cpnt_id = 'Appr' then 1 else 0 end) as Appr
from (
select
cpnt.cpnt_id,
s.ORG_ID,
pc.stud_id,
pc.compl_dte
from
pa_stud_program sp,
pa_program p,
pa_student s,
pa_stud_cpnt pc,
ps_program_type pt,
pa_cpnt cpnt
WHERE p.PROGRAM_SYS_GUID = sp.PROGRAM_SYS_GUID
and pc.compl_dte is not null
and cpnt.cpnt_id in ('Trainee','SvcTech','CrewChief','SvcCoord','Appr')
and s.jp_id in ('1801','1805','1810','1811')
and s.EMP_STAT_ID = 'Active'
AND cpnt.CPNT_TYP_ID = p.CPNT_TYP_ID
AND cpnt.CPNT_ID = p.CPNT_ID
AND cpnt.REV_DTE = p.REV_DTE
AND pc.STUD_ID = sp.STUD_ID
AND sp.stud_id = s.STUD_ID
AND pc.CPNT_ID = sp.CPNT_ID
AND pc.CPNT_TYP_ID = sp.CPNT_TYP_ID
AND pc.REV_DTE = sp.REV_DTE
AND pc.seq_num = sp.seq_num
AND pt.PROGRAM_TYPE_ID = p.PROGRAM_TYPE
) as a
group by ORG_ID