2012-02-07 5 views
1

Я пытаюсь создать отчет и есть пять полей в таблице, определяющих расы. Чтобы очистить отчет, я пытаюсь создать столбец в отчете, который создает свои данные на основе этих данных. Чтобы уточнить, позвольте мне привести пример.Заполнение поля на основе других значений полей

Текущего поле:

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 
+0

Возможно ли, чтобы более одного из этих полей было 1 в одной записи? Если да, хотите ли вы, чтобы все применимые расы включались в описание или только в список в списке? –

+0

@ Mark Нет, было бы только одно из этих полей для любой строки со значением 1. – rspencer

+0

У вас есть необходимая запятая между «END As Race» и «FROM». Возможно, вы планировали иметь другое поле? – JeffO

ответ

2

Самый простой способ сделать это было бы с пунктом случае в запросе: ответ

select ... 
     case 
      when RaceAfroAmer = 1 then 'RaceAfroAmer' 
      when RaceAmerIndian = 1 then 'RaceAmerIndian' 
      when RaceCaucasion = 1 then 'RaceCaucasion' 
      when RaceHispanic = 1 then 'RaceHispanic' 
      when RaceOriental = 1 then 'RaceOriental' 
     end as RaceDescription, 
     ... 
1

Марка хорошо, и сохраняет логику в запросе SQL. Но в случае «Можно ли это сделать непосредственно с программированием SSRS?» означает, что OP хотел бы сохранить это в отчете, а не в запросе, то есть несколько способов, которыми вы можете поместить это в формулы VB для SSRS.

Вы можете создать либо вычисляемое поле для набора данных или просто использовать формулу в камере:

=SWITCH(
Fields!RaceAfroAmer.Value = 1, "RaceAfroAmer", 
Fields!RaceAmerIndian.Value = 1, "RaceAmerIndian", 
Fields!RaceCaucasion.Value = 1, "RaceCaucasion", 
Fields!RaceHispanic.Value = 1, "'RaceHispanic", 
Fields!RaceOriental.Value = 1, "RaceOriental") 

Или, вы можете создать несколько заполнителей в ячейке и изменить видимость тех, на основе поля значения.

Смежные вопросы