0

だから私は一度にいくつかのことをやろうとしていますが、それらをまとめる方法がわかりません。

私の最初のステップは、複数のセルを取得し、ID に基づいてそれらを 1 つの行に結合することでした。

USE MAIN;
Select ACT.ID AS Activity

,STUFF ((       Select ',' + LE.Name AS [text()]

               FROM ActivityDemographicEthnicity ADE
                LEFT OUTER JOIN LookupEthnicity LE
                ON LE.ID  = ADE.ethinicityId 

                WHERE ACT.ID = ADE.ActivityID

                FOR XML PATH ('')),1,1,'')

            AS Ethnicity

FROM Activity ACT

これはうまく機能し、次のようなものが生成されます。

ID    Ethnicity
------------------------------------------
123   African, African American, Caucasian
125   Caucasian 
128   NULL

しかし、私はこのようなものが欲しいです:

ID           Ethnicity
----------------------------------------
123          African American, Caucasian
125          Caucasian
128          General Market

case ステートメントを介して新しい値を定義した場所:

USE Main;
(Select CASE 
            When LE.Name is null THEN 'General Market'
            When LE.Name = 'African' THEN 'African American'
            When LE.Name = 'American Indian/Native American' Then 'American Indian'
            WHEN LE.NAME = 'Cambodian' Then 'Asian'
            When LE.Name = 'Chinese' Then 'Asian'
            When LE.Name = 'Filipino' Then 'Asian'
            When LE.Name = 'Hmong' Then 'Asian'
            WHEN LE.NAME = 'Japanese' THEN 'Asian'
            WHEN LE.Name = 'Korean' Then 'Asian'
            WHEN LE.Name = 'Laotian' Then 'Asian'
            WHEN LE.Name = 'Vietnamese' Then 'Asian'
            WHEN LE.Name = 'Armenian' Then 'Other'
            WHEN LE.Name = 'Russian' Then 'Other'
            WHEN LE.Name = 'Ukranian' Then 'Other'
            WHEN LE.Name = 'Other (specify)' Then 'Other'
            Else LE.Name
            End 'Ethnicity'

            From ActivityDemographicEthnicity ADE

            LEFT JOIN LookupEthnicity LE
                ON LE.ID = ADE.ID)`

両方のクエリは個別に機能しますが、それらを 1 つのクエリに結合するにはどうすればよいですか?

4

2 に答える 2

0

これを試してみてください:

Select ACT.ID AS Activity,
ISNULL(STUFF((Select distinct ',' + CASE 
                When LE.Name is null THEN 'General Market'
                When LE.Name = 'African' THEN 'African American'
                When LE.Name = 'American Indian/Native American' Then 'American Indian'
                WHEN LE.NAME = 'Cambodian' Then 'Asian'
                When LE.Name = 'Chinese' Then 'Asian'
                When LE.Name = 'Filipino' Then 'Asian'
                When LE.Name = 'Hmong' Then 'Asian'
                WHEN LE.NAME = 'Japanese' THEN 'Asian'
                WHEN LE.Name = 'Korean' Then 'Asian'
                WHEN LE.Name = 'Laotian' Then 'Asian'
                WHEN LE.Name = 'Vietnamese' Then 'Asian'
                WHEN LE.Name = 'Armenian' Then 'Other'
                WHEN LE.Name = 'Russian' Then 'Other'
                WHEN LE.Name = 'Ukranian' Then 'Other'
                WHEN LE.Name = 'Other (specify)' Then 'Other'
                ELSE LE.Name
                END  
               FROM ActivityDemographicEthnicity ADE
               LEFT OUTER JOIN LookupEthnicity LE ON LE.ID  = ADE.ethnicityId 
               WHERE ACT.ID = ADE.ActivityID
               FOR XML PATH ('')),1,1,''), 'General Market') AS Ethnicity
FROM Activity ACT

アクティビティに対応する ActivityDemographicEthnicity がない場合をキャッチするにSTUFFは、関数全体を でラップする必要があります。ISNULLそして、重複を削除するためselect distinctの内部。STUFF

SQL フィドル

于 2014-06-05T00:51:07.490 に答える