Я пытаюсь создать отчет и есть пять полей в таблице, определяющих расы. Чтобы очистить отчет, я пытаюсь создать столбец в отчете, который создает свои данные на основе этих данных. Чтобы уточнить, позвольте мне привести пример.Заполнение поля на основе других значений полей
Текущего поле:
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
Когда я изменить это включить заявление случай и гонки поля я получаю ошибку в синтаксисе вблизи ключевого слова 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 в одной записи? Если да, хотите ли вы, чтобы все применимые расы включались в описание или только в список в списке? –
@ Mark Нет, было бы только одно из этих полей для любой строки со значением 1. – rspencer
У вас есть необходимая запятая между «END As Race» и «FROM». Возможно, вы планировали иметь другое поле? – JeffO