微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在SQL Server中将数据收集到单行

如何解决如何在SQL Server中将数据收集到单行

请尝试这个。

SELECT disTINCT
      DealID
    , STUFF((
        SELECT N', ' + CAST([Description] AS VARCHAR(4000))
        FROM Risks R2
        WHERE R1.DealID = R2.DealID
        FOR XML PATH (''), TYPE), 1, 2, '') AS AllDescriptions   
FROM Risks R1
GROUP BY DealID

修改后的触发器并假设DealID和Description是Risks表的列名称

DECLARE @DealID INT;

SELECT 
    @DealID = [DealID]                                         
FROM inserted;

INSERT INTO [dbo].[Risks_history]
      (
            DealID,
            [AllDescription]
      )
      SELECT 
            [DealID],
            STUFF((
                SELECT ', ' + R2.[Description]
                FROM Risks R2
                WHERE R1.DealID = R2.DealID
                FOR XML PATH (''), TYPE), 1, 2, '') AS AllDescriptions                                        
        FROM Risks R1
        WHERE DealID = @DealID
    GROUP BY DealID

解决方法

我有 风险 表和历史记录表 Risks_history 。在“风险”表中,我有如下数据:

-----------------------------
| ID | DealID | Description |
-----------------------------
| 1  | 14     | Risk1       |
-----------------------------
| 2  | 14     | Risk2       |
-----------------------------
| 3  | 14     | Risk3       |
-----------------------------
| 4  | 15     | Risk4       |
-----------------------------

因此,我们可以看到一笔交易可以有多个风险。我需要在历史记录中保存表 Risks的 数据,如下所示:

-------------------------------------
| ID | dealID |   AllDescriptions   |   
-------------------------------------
| 1  | 14     | Risk1,Risk2,Risk3 |
-------------------------------------
| 2  | 15     | Risk4               |
-------------------------------------

我需要触发器来做到这一点。但是现在我不能。

如何将数据从多行收集到一行?

编辑:

我需要触发器,所以现在我有以下触发器:

      INSERT INTO [dbo].[Risks_history]
      (
            DealID,[AllDescription]
      )
      SELECT 
            [DealID],stuff((select ',' + i.name from inserted i
                   where i.DealID= i2.DealID
                   FOR XML PATH('')),1,'') as Description                                          
        FROM inserted i2;

但是在 Risks_history 表中,我有如下数据(触发条件如下):

 - When I change Risk1:

    -------------------------------------
    | ID | dealID |   AllDescriptions   |   
    -------------------------------------
    | 1  | 14     | Risk1,Risk1,Risk1 |
    -------------------------------------

 - When I change Risk2:

-------------------------------------
| ID | dealID |   AllDescriptions   |   
-------------------------------------
| 1  | 14     | Risk2,Risk2 |
-------------------------------------

 - When I change Risk3:

-------------------------------------
| ID | dealID |   AllDescriptions   |   
-------------------------------------
| 1  | 14     | Risk3,Risk3,Risk3 |
-------------------------------------

但是无论风险如何变化,我都需要写所有风险

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。