【问题标题】:How can I print multiple outcomes of the same records in a single row?如何在一行中打印相同记录的多个结果?
【发布时间】:2016-08-14 13:48:08
【问题描述】:

我有下表,按“CaseID”列排序。

我需要以下面显示的方式打印输出,其中使用逗号将每个案例的所有结果分组在一起。我编写了以下查询来获取其他所有内容,但不确定如何附加所有结果。

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

我怎样才能做到这一点?请指教。

【问题讨论】:

  • 你是什么意思“组合在一起”? SQL 结果集采用表格格式,如您的第一个示例所示。如果您想为报表以不同的方式构造数据,最好在应用层完成。
  • 不,我的意思是第二个表中的结果列将每一行的所有结果附加在一起。我需要在 sql 层级别获取该格式:(

标签: sql sql-server sql-server-2012 common-table-expression string-function


【解决方案1】:

将所有查询放入 CTE,然后使用 FOR XML

;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]

【讨论】:

    猜你喜欢
    • 2022-12-14
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多