sql - 微软SQL服务器: converting 3 rows to 3 columns

标签 sql sql-server pivot rows

我正在处理一份相当大的报告,结果我需要在 1 行而不是最多 3 行中包含保险信息。我可以通过基础知识进行 SQL 编码,但是当涉及到数据透视表时和其他高级任务我陷入困境并且变得令人困惑,所以我想我会求助于你们。我查看了几个将行更改为列的示例,并开始理解它,但当涉及到实际编码时,它开始变得一团糟。 :(

问题:
尝试将所有 3 个保险放在一行中,而不是为每个保险打印一个包含所有重复患者数据的新行。

EXAMPLE
TYPE  ACCTNUM_2    PaySrc_1   
2     000001       MEDICARE
2     000001       BLUE CROSS
2     000152       BLUE CROSS

I would like to display it as 
TYPE  ACCTNUM_2 ... PaySrc_1    PaySrc_2    PaySrc3
2     000001        MEDICARE    BLUE CROSS
2     000152        BLUE CROSS

代码:

DECLARE
    @StartDate DateTime,
    @EndDate DateTime,
    SET @StartDate = '10/28/2013 00:00:000'
    SET @EndDate = '10/28/2013 23:59:000'
    SET @RecordType = '2'

SELECT 
    @RecordType AS RecordType
    ,ISNULL(AbstractData.AccountNumber,'') AS AcctNum
    ,ISNULL(AbsInsurances.InsuranceName,'') AS PaySrc_1
FROM AbstractData  
    JOIN AbsInsurances
        ON (AbsInsurances.VisitID = AbstractData.VisitID)
        AND (AbsInsurances.SourceID = AbstractData.SourceID)


WHERE AbstractData.DischargeDateTime BETWEEN '05/15/2012 00:00:000' and '08/15/2012 00:00:000'
ORDER BY AbstractData.DischargeDateTime,
AbstractData.PatientID 

最佳答案

根据解释和示例代码,很难理解为什么您要尝试在 T-SQL 中执行此操作。如果有您可以使用的报告工具,请尝试使用它。

有一种方法可以连接名称列表,但您将不得不(稍微)牺牲您建议的报告结构。考虑连接 AbsInsurances.PaySrc_12 中的值。这是一个您可能可以使用的片段。如果您确实可以使用它,我强烈建议您将其用作临时解决方案,直到您找到更实用/可维护的方法。

SELECT DISTINCT ACCTNUM_2, STUFF(InsuranceProviders.Names, 1, 1, '') PAYSRC_12 
FROM AbstractData t
       CROSS APPLY (
                    SELECT ',' + PaySrc_12 
                    FROM AbstractData
                    WHERE ACCTNUM_2 = t.ACCTNUM_2
                    FOR XML PATH('')
                    )InsuranceProviders(Names) 
    WHERE ACCTNUM_2='000001'  

关于sql - 微软SQL服务器: converting 3 rows to 3 columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023244/

相关文章:

sql - INSERT INTO…SELECT…是否始终按顺序位置匹配字段?

ms-access - 使用 Access 2007 VBA 创建数据透视图

sql - Oracle SQL开发人员: How to transpose rows to columns using PIVOT function

sql - 在SQL Server 2008数据库上安排日常任务

sql - 获取每个组的最后一行

sql-server - 合并命令是否进行合法更新?

sql - 如何关闭与数据库的现有连接

mysql - 数据库行需要显示在列中

mysql - 如果数据存在 UPDATE else INSERT SQL 查询 - 无外键

php symfony Doctrine 或从 2 个表中获取数据