标签: for-xml-path

在 SQL Server 2016 中将 GROUP BY 与 FOR XML PATH 结合使用

我在尝试着

  1. 按 ID 分组和
  2. 将多个评论聚合到一行中

现在,我可以做到不。单个 ID ( ID = 1006) 的 2 部分,但我想汇总所有 ID 的评论。我正在努力在查询中的位置以及如何添加“group by”子句。

这是查询:

create table Comments (ID int, Comment nvarchar(150), RegionCode int)


insert into Comments values (1006, 'I', 1)
, (1006, 'am', 1)
, (1006, 'good', 1)
, (1006, 'bad', 2)
, (2, 'You', 1)
, (2, 'are', 1)
, (2, 'awesome', 1)


SELECT 
    SUBSTRING((SELECT Comment
               FROM Comments
               WHERE ID = 1006 AND RegionCode != 2
               FOR XML PATH('')), 1, 999999) AS Comment_Agg
Run Code Online (Sandbox Code Playgroud)

我想要的结果看起来像这样: …

xml sql sql-server xquery for-xml-path

3
推荐指数
1
解决办法
7019
查看次数

SQL FOR XML PATH列表和COUNT

我有一张桌子如:

|Date         |Name|
--------------------
|'20-May-2011'|Bob |
|'20-May-2011'|Fred|
|'20-May-2011'|Jim |
|'21-May-2011'|Bob |
|'21-May-2011'|Ed  |
|'22-May-2011'|Bill|
Run Code Online (Sandbox Code Playgroud)

我需要一个查询来返回:

|Date         |Count|Names           |
--------------------------------------
|'20-May-2011'|    3|'Bob, Fred, Jim'|
|'21-May-2011'|    2|'Bob, Ed'       |
|'22-May-2011'|    1|'Bill'          |
Run Code Online (Sandbox Code Playgroud)

换句话说,我想要一个列表和按日期的名称计数.我能想到的最好的是:

SELECT list.[Date], [Count], [Names]
FROM (
    SELECT  [Date], 
            STUFF((
                SELECT ', ' + [Name]
                FROM #table t2
                WHERE t2.[Date] = t.[Date]
                ORDER BY [Name]
                FOR XML PATH('')
            ), 1, 2, '') AS [Names]
    FROM #table t
    GROUP BY [Date]
) [list]
INNER JOIN (
    SELECT  [Date], 
            COUNT(*) AS [Count] …
Run Code Online (Sandbox Code Playgroud)

sql-server for-xml-path

2
推荐指数
1
解决办法
8003
查看次数

XML 路径 ibn SQL 的分组依据

我正在尝试将列中的一些值连接到单个字段中。

到目前为止我有以下代码。

SELECT DISTINCT [customer id]
      ,[customer name]
      ,STUFF( (SELECT ',' + [description] 
                             FROM [Invoicing].[dbo].[CurrentBillMaster] 
                             ORDER BY [description]
                             FOR XML PATH('')),
                            1, 1, '')
      ,[id]
      ,[Section]
      ,[customerpo]
  FROM [Invoicing].[dbo].[CurrentBillMaster]
  GROUP BY [customer id], [customer name], [description],[qty],
           [identifier],[FromDate],[ToDate],[id],[Section],[customerpo]
Run Code Online (Sandbox Code Playgroud)

该代码基本上可以工作,但是我想要串联的描述,只是为了显示该唯一的[客户 ID] 的描述

非常感谢任何帮助

sql t-sql for-xml-path

2
推荐指数
1
解决办法
1871
查看次数

FOR XML PATH(' ') 是什么意思?

是什么意思

FOR XML PATH('')?
Run Code Online (Sandbox Code Playgroud)

它代表什么。因为它没有根节点。

sql sql-server for-xml-path

1
推荐指数
1
解决办法
5417
查看次数

将一组行转置为多列

我正在尝试将一组行转置为多列。

到目前为止,我已经能够使用 xml 路径将一组行聚合到单个列中,但我需要将更多数据保留到更多列中。

CntTyp表(触点类型)

| ContactID | CatCode | CatDesc |
|-----------|---------|---------|
| 89        | 26      | OA      |
| 89        | 27      | OA2     |
| 90        | 26      | OA      |
| 91        | 26      | OA      |
| 91        | 1625    | Donor   |
| 91        | 1625    | Player  |
Run Code Online (Sandbox Code Playgroud)

所需输出

| ContactID | CatCode | CatDesc | CatCode | CatDesc | CatCode | CatDesc |
|-----------|---------|---------|---------|---------|---------|---------|
| 89        | 26      | OA      | 27 …
Run Code Online (Sandbox Code Playgroud)

sql database sql-server for-xml-path

1
推荐指数
1
解决办法
988
查看次数

带有“FOR JSON PATH”子句的 SQL Server 数据屏蔽错误

我正在使用 SQL Server Standard(64 位)14.0.1000.169 在 QA 服务器上使用屏蔽数据库。这是我的结构:

    CREATE TABLE [dbo].[Test](
         [Column1] [VARCHAR(64)] NULL,
         [Column2] [VARCHAR(64)] NULL
    )
    GO
    INSERT INTO [dbo].[Test]
    VALUES ('ABCDEFG', 'HIJKLMN')
Run Code Online (Sandbox Code Playgroud)

我用以下代码屏蔽了该列:

    ALTER TABLE [dbo].[Test]
    ALTER COLUMN [Column1] VARCHAR(64) MASKED WITH (FUNCTION = 'default()');
Run Code Online (Sandbox Code Playgroud)

当我使用非允许的用户执行以下查询时,它按预期工作:

    SELECT [Column1], [Column2]
    FROM [dbo].[Test]
    FOR JSON PATH
    -- RESULT: '[{"Column1":"xxxx", "Column2":"HIJKLMN"}]'
Run Code Online (Sandbox Code Playgroud)

但当同一个非允许用户将结果保存在变量中时(主要目标),它不起作用:

    DECLARE @var VARCHAR(64)
    SET @var = (SELECT [Column1], [Column2] FROM [dbo].[Test] FOR JSON PATH)
    SELECT @var --it should show a valid JSON...
    -- RESULT: 'xxxx' <-- JSON LOSES …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server for-xml-path for-json dynamic-data-masking

1
推荐指数
1
解决办法
368
查看次数