【问题标题】:Can't figure out how to use XML path不知道如何使用 XML 路径
【发布时间】:2018-08-02 08:41:52
【问题描述】:

您好,我已尽我所能,但不知道该怎么做。

我有这张桌子“T1”

----RID----PID----
     1      1      
     1      2     

我在 RID 上留下加入另一个“T2”以获得 PID 的名称列:

----RID-----PID-----Pname----
     1      1        Task1
     1      2        Task2

到目前为止一切顺利。但我真正想要的是这些列:1.(不同的 RID)2.(每个 Rid 中的 PID 计数)3.(所有 PID 名称的逗号分隔字符串)

----RID-----PID-----Pname----
     1       2      Task1,Task2

但如果一个 RID 只有一个 Pname,那么这里不应该是逗号:

----RID-----PID-----Pname----
     1       2      Task1,Task2
     2       1      Task1

有人吗?我已经尝试过使用 XML PATH 但无法弄清楚.....

【问题讨论】:

    标签: sql-server tsql for-xml-path


    【解决方案1】:

    完整的工作示例:

    DECLARE @T1 TABLE
    (
        [RID] INT
       ,[PID] INT
    );
    
    INSERT INTO @T1 ([RID], [PID])
    VALUES (1, 1)
          ,(1, 2);
    
    DECLARE @T2 TABLE
    (
        [RID] INT
       ,[PID] INT
       ,[Pname] VARCHAR(12)
    );
    
    INSERT INTO @T2 ([RID], [PID], [Pname])
    VALUES (1, 1, 'Task1')
          ,(1, 2, 'Task2');
    
    
    SELECT T1.[RID] 
          ,COUNT(T1.[PID]) AS [PID]
          ,[value] AS [PName]
    FROM @T1 T1
    CROSS APPLY
    (
        SELECT STUFF
        (
            (
                SELECT ',' + T2.[Pname]
                FROM @T2 T2
                WHERE  T2.[RID] = T2.[RID]          
                ORDER BY T2.[PID]
                FOR XML PATH(''), TYPE
            ).value('.', 'VARCHAR(MAX)')
            ,1
            ,1
            ,''
        )
    
    ) DS ([value])
    GROUP BY T1. [RID]
            ,[value];
    

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多