レポートを作成しようとしており、レースを定義するテーブルに5つのフィールドがあります。レポートをクリーンアップするには、そのデータに基づいて作成された列をレポートに作成しようとしています。明確にするために例を挙げましょう。他のフィールドの値に基づいてフィールドに値を設定する
現在のフィールド:
RaceAfroAmer、RaceAmerIndian、レースCaucasion、人種ヒスパニック、RaceOriental
これらの各フィールドは、我々はレースを必要とするレポートでは1または0
と移入
レース
012これらのフィールドの値に基づいて作成される列これらの5つのフィールドの値が1の場合、値はそのフィールド名と同じです(RaceAfroAmer = 1の場合、RaceAfroAmerを使用して次のフィールドなどを確認します)。
これは、レースフィールドが自動入力された新しいテーブルを作成する必要がありますか?そのテーブルからレース値を引き出しますか? 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文とレースのフィールドを含めるために、これを変更すると、私はCODE WORKING
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
からキーワード近い構文でエラーが発生します。
を(私はAS人種を取りましたCASEステートメントの末尾に「Race」を追加して、ステートメントの最後に「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つのレコードで1つにすることは可能でしょうか?そうであれば、該当するすべてのレースを説明に含めるか、リスト内の最初のレースだけを含めたいですか? –
@ Markいいえ、値が1の行には、これらのフィールドのいずれか1つしかありません。 – rspencer
'END ASS'RACE'と 'FROM'の間に不要なカンマがあります。別のフィールドを使用する予定ですか? – JeffO