2012-02-07 21 views
1

レポートを作成しようとしており、レースを定義するテーブルに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 
+0

複数のフィールドを1つのレコードで1つにすることは可能でしょうか?そうであれば、該当するすべてのレースを説明に含めるか、リスト内の最初のレースだけを含めたいですか? –

+0

@ Markいいえ、値が1の行には、これらのフィールドのいずれか1つしかありません。 – rspencer

+0

'END ASS'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プログラミングで直接行うことはできますか?"オペレータがクエリーではなくレポートにこれを保持したい場合、SSRSのVB式にこれを入れることができる方法がいくつかあります。

あなたがデータセットの計算フィールドのいずれかを作成するか、またはちょうどあなたのセルに数式を使用することができます。

=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") 

それとも、あなたがセル内に複数のプレースホルダを作成して、フィールドに基づいて、これらの可視性を変更することができます値。

関連する問題