1

私は以下の表を "CaseID"列で並べています。同じレコードの複数の結果を1行に印刷するにはどうすればよいですか?

enter image description here

私はすべての結果はコンマを使用して、各場合のために一緒にグループ化されている以下の表示方法で出力を印刷する必要があります。私はすべての結果を追加する方法が分からないが、すべてを得るために以下のクエリを書いた。

SELECT 
    c.CaseID AS 'Case #', 
    c.EventDate AS 'Date', 
    CONCAT(d.DrugName+'-',m.ManufacturerName) AS 'Drug & Manufacturer', 
    CONCAT(CONVERT(VARCHAR(10),c.Age)+' ',a.AgeUnitName) AS 'Age', 
    c.Sex, 
    ou.OutcomeName 
FROM 
    Consumes con 
INNER JOIN 
    [Case] c ON con.FKCaseID = c.CaseID 
INNER JOIN 
    Drug d ON d.DrugID = FKDrugID 
INNER JOIN 
    Manufacturer m ON m.ManufacturerID = con.FKManufacturerID 
INNER JOIN 
    AgeUnit a ON a.AgeUnitID = c.FKAgeUnitID 
INNER JOIN 
    Case_Outcome oc ON oc.FKCaseID = c.CaseID 
INNER JOIN 
    OutCome ou ON oc.FKOutcomeID = ou.OutcomeID 
GROUP BY 
    c.CaseID, c.EventDate, d.DrugName, 
    m.ManufacturerName, c.Age, a.AgeUnitName, c.Sex, ou.OutcomeName 

enter image description here

私はこれをどのように達成することができますか?ご意見をお聞かせください。

+2

を使用すると、 "一緒にグループ化された" とはどういう意味ですか?最初の例に示すように、SQLの結果セットは表形式になっています。レポートのデータ構造を変えたい場合は、アプリケーション層で行うのが最適です。 –

+0

いいえ、2番目の表の結果の列には、各行のすべての結果が一緒に追加されています。私はSQL層レベルでその形式を取得する必要があります:( – mayooran

答えて

1

その後、FOR XMLを使用し、CTE内のすべてのクエリを入れてください:

;WITH cte AS (
--your query goes here 
) 

SELECT c.[Case #], 
     c.[Date], 
     c.[Drug & Manufacturer], 
     c.[Age], 
     c.[Sex], 
     STUFF((SELECT ','+OutcomeName 
     FROM cte 
     WHERE c.[Case #] = [Case #] 
     FOR XML PATH('')),1,1,'') as OutcomeName 
FROM cte c 
GROUP BY c.[Case #], 
     c.[Date], 
     c.[Drug & Manufacturer], 
     c.[Age], 
     c.[Sex] 
関連する問題