0

データセットからアクティビティのリストを取得する SSRS のパラメーター ドロップダウンを設定できます。私が抱えている問題はデータ内にありますが、diact テーブルにのみ含まれる activitylabel フィールドがあり、アクティビティのラベル値が「versional」の場合、代わりに親アクティビティの名前に置き換える case ステートメントが必要ですデフォルトの子アクティビティ名。データを結合するフィールドは activity_pk と activityfk で、正しい親を取得するフィールドは prntactfk です。以下は、ドロップダウン内のクエリで使用される DISTINCT を使用して、2 つの Test Course 行を 1 つにするデータの例です。

Example Data: (Name - Label) 
CourseA-Course (Not Versional so leave alone) 
Test Course-Versional  (Parent is Test Course Parent) 
Test Course (1.1)-Versional (Parent is Test Course Parent) 
CourseB-Document (Not Versional so leave alone)

dimact1.ActivityLabel = 'Versional: を使用せずに SQL で機能するクエリ

SELECT DISTINCT act1.activityname
FROM  act1
INNER JOIN dimact1 on dimact1.ActivityFK = act1.Activity_PK
WHERE 
CASE 
        WHEN dimact1.ActivityLabel = 'Versional' 
        AND EXISTS (
            SELECT dimact2.PrntActFK
                FROM dimact2
        WHERE dimact2.activitylabel = 'Versional'
        AND dimact2.PrntActFK = act1.Activity_PK
    ) THEN 1
END = 1
ORDER BY act1.activityname ASC
4

1 に答える 1

0

通常、このような状況ではLEFT JOIN、親テーブルに対してCASEorを使用してCOALESCE、親と子の値を選択します。

したがって、次のようなデータの場合:

create table Courses
(
  ID int
  , name varchar(100)
  , label varchar(100)
  , parentID int
)

insert into Courses
values
(1,'Test Course Parent','Test Course Parent',null)
, (2,'CourseA','Course',null)
, (3,'CourseB','Document',null)
, (4,'Test Course','Versional',1)
, (5,'Test Course (1.1)','Versional',1)

次のようなクエリを使用できます。

select distinct case when c.Label = 'Versional' then p.name
  else c.name
  end as name
from Courses c
  left join Courses p on c.parentID = p.ID

demo を使用した SQL Fiddle

うまくいけば、これで正しい軌道に乗ることができます。私はあなたの例を理解するのが少し難しいと感じたので、より多くの情報が必要な場合は、いくつかのサンプルデータと必要な結果を提供してください.

于 2013-05-10T23:05:09.180 に答える