我想创建一个报告,有表中的五个字段定义比赛。为了清理报告,我试图在报告中创建一个根据这些数据创建数据的列。澄清让我举个例子。填充字段值
当前字段:
RaceAfroAmer,RaceAmerIndian,种族种族白种人,种族西班牙,RaceOriental
这些场的每一个1或0
填充在报告中,我们需要一场比赛根据这些字段的值填充的列,即
比赛
如果任何这些5个字段的值等于1,则该值等于该字段名称(如果RaceAfroAmer = 1,则该行的比赛柱RaceAfroAmer填充如果不是它检查下一个字段,等等等等)。
这是否需要创建一个新表,Race字段是自动填充的,然后我们从该表中提取竞争值? SSRS编程可以直接完成吗?
为了澄清这进一步,我将下面的报告,我完全原始查询,实质上所有我试图做的是采取这种精确的查询,并添加一个比赛列。
WITH HR_CTE (seq, EmployeeId, Name, JobTitle, EffectiveDate, SocSecNbr, State, DateOfBirth, DateHired, SalaryType, CpnyId)
AS
(SELECT ROW_NUMBER() OVER(PARTITION BY E.[EmployeeId] ORDER BY J.EffectiveDate DESC) AS seq,
E.EmployeeID, E.Name, J.JobTitle, J.EffectiveDate, E.SocSecNbr, E.State, E.DateOfBirth, E.DateHired, S.SalaryType, E.CpnyId
FROM XHR_Employee E
JOIN XHR_JobHistory J
ON E.[EmployeeId] = J.[EmpId]
JOIN XHR_SalaryHist S
ON E.[EmployeeId] = S.[EmpId])
SELECT EmployeeID, Name, JobTitle, EffectiveDate, SocSecNbr, State, DateOfBirth, DateHired, SalaryType, CpnyId
FROM HR_CTE
WHERE seq = 1
AND (CpnyID IN (@CpnyID))
AND (JobTitle IN (@JobTitle))
AND (SalaryType IN (@SalaryType))
ORDER BY Name
当我将其更改为包括case语句和比赛场,我得到的关键字附近有语法错误FROM
WITH HR_CTE (seq, EmployeeId, Name, JobTitle, EffectiveDate, SocSecNbr, State, DateOfBirth, DateHired, SalaryType, CpnyId, RaceAfroAmer, RaceAmerIndian, RaceCaucasian, RaceHispanic, RaceOriental, RaceOther01, RaceOther02)
AS
(SELECT ROW_NUMBER() OVER(PARTITION BY E.[EmployeeId] ORDER BY J.EffectiveDate DESC) AS seq,
E.EmployeeID, E.Name, JobTitle, J.EffectiveDate, E.SocSecNbr, E.State, E.DateOfBirth, E.DateHired, S.SalaryType, E.CpnyId, E.RaceAfroAmer, E.RaceAmerIndian, E.RaceCaucasian, E.RaceHispanic, E.RaceOriental, E.RaceOther01, E.RaceOther02
FROM XHR_Employee E
JOIN XHR_JobHistory J
ON E.[EmployeeId] = J.[EmpId]
JOIN XHR_SalaryHist S
ON E.[EmployeeId] = S.[EmpId])
SELECT EmployeeID, Name, JobTitle, EffectiveDate, SocSecNbr, State, DateOfBirth, DateHired, SalaryType, CpnyId,
CASE
WHEN RaceAfroAmer = 1 THEN 'Black/African American'
WHEN RaceAmerIndian = 1 THEN 'American Indian/Alaska Native'
WHEN RaceCaucasian = 1 THEN 'White'
WHEN RaceHispanic = 1 THEN 'Hispanic/Latino'
WHEN RaceOriental = 1 THEN 'Asian'
WHEN RaceOther01 = 1 THEN 'Native Hawaii/Pacific Islander'
WHEN RaceOther02 = 1 THEN 'Two Or More Races'
END AS Race,
FROM HR_CTE
WHERE seq = 1
ORDER BY Name
工作代码:
(我把种族在CASE语句的底部,并在选择语句的末尾添加'Race'=
WITH HR_CTE (seq, EmployeeId, Name, JobTitle, EffectiveDate, SocSecNbr, State, DateOfBirth, DateHired, SalaryType, CpnyId, RaceAfroAmer, RaceAmerIndian, RaceCaucasian, RaceHispanic, RaceOriental, RaceOther01, RaceOther02)
AS
(SELECT ROW_NUMBER() OVER(PARTITION BY E.[EmployeeId] ORDER BY J.EffectiveDate DESC) AS seq,
E.EmployeeID, E.Name, JobTitle, J.EffectiveDate, E.SocSecNbr, E.State, E.DateOfBirth, E.DateHired, S.SalaryType, E.CpnyId, E.RaceAfroAmer, E.RaceAmerIndian, E.RaceCaucasian, E.RaceHispanic, E.RaceOriental, E.RaceOther01, E.RaceOther02
FROM XHR_Employee E
JOIN XHR_JobHistory J
ON E.[EmployeeId] = J.[EmpId]
JOIN XHR_SalaryHist S
ON E.[EmployeeId] = S.[EmpId])
SELECT EmployeeID, Name, JobTitle, EffectiveDate, SocSecNbr, State, DateOfBirth, DateHired, SalaryType, CpnyId, 'Race'=
CASE
WHEN RaceAfroAmer = 1 THEN 'Black/African American'
WHEN RaceAmerIndian = 1 THEN 'American Indian/Alaska Native'
WHEN RaceCaucasian = 1 THEN 'White'
WHEN RaceHispanic = 1 THEN 'Hispanic/Latino'
WHEN RaceOriental = 1 THEN 'Asian'
WHEN RaceOther01 = 1 THEN 'Native Hawaii/Pacific Islander'
WHEN RaceOther02 = 1 THEN 'Two Or More Races'
END
FROM HR_CTE
WHERE seq = 1
ORDER BY Name
有没有可能对这些领域的多个在一个记录是1?如果是这样,你是否希望将所有适用的比赛都包含在说明中,或者只是列表中的第一个? – 2012-02-07 16:03:51
@ Mark否,只有其中一个值为1的行中有一个。 – rspencer 2012-02-07 16:09:50
'END As Race'和'FROM'之间有逗号逗号也许您计划另一个字段? – JeffO 2012-02-07 16:46:41