Sql server 合并rdlc报告中的重复项(行组)

Sql server 合并rdlc报告中的重复项(行组),sql-server,report,rdlc,Sql Server,Report,Rdlc,我有3个数据库表,分别命名为patient、test和groups “患者”表中有“患者姓名”和“测试Id”列 测试表具有test\u id、test\u name和group\u id 组表具有组Id和组名称 考虑到3个表之间的关系,我进行了SQL查询,将3个表中的所有数据都带入其中 这是我查询的结果 patient_name test_name group_id A test1 1 A

我有3个数据库表,分别命名为patient、test和groups

“患者”表中有“患者姓名”和“测试Id”列

测试表具有
test\u id
test\u name
group\u id

组表具有
组Id
组名称

考虑到3个表之间的关系,我进行了SQL查询,将3个表中的所有数据都带入其中

这是我查询的结果

patient_name     test_name              group_id

A                  test1                1
A                  test2                1
A                  test3                1
B                  test4                2
B                  test5                2
我希望结果是这样的

Patient_name    Test_name                  group_id

A               test1, test2, test3          1

B               test4, test5                 2
这是我的示例,我尝试使用lookupper函数进行连接

已成功,但使用测试编号重复该行-如果患者有3次测试,则该行将重复3次

,像那样

A                       test1, test2, test3          1

A                       test1, test2, test3          1

A                       test1, test2, test3          1

B                       test4, test5                 2

B                       test4, test5                 2
我只希望每个患者的结果排在一行

很抱歉提出了这么长的问题,但我想澄清我的情况。

使用[master] 去

/******对象:数据库[NewTest]脚本日期:08/04/2018 15:36:09******/ 在主服务器上创建数据库[NewTest] (NAME=N'NewTest',FILENAME=N'C:\Program Files(x86)\Microsoft SQL Server\MSSQLSERVER\MSSQL\DATA\NewTest.mdf',SIZE=3072KB,MAXSIZE=UNLIMITED,FILEGROWTH=1024KB) 登录 (名称=N'NewTest_log',文件名=N'C:\Program Files(x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\NewTest_log.ldf',大小=1024KB,最大大小=2048GB,文件增长=10%) 去

ALTER DATABASE[NewTest]设置兼容性\u级别=100 去

如果(1=FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) 开始 EXEC[NewTest].[dbo].[sp_全文数据库]@action='enable' 结束 去

ALTER DATABASE[NewTest]将ANSI\u NULL\u默认设置为OFF 去

ALTER DATABASE[NewTest]将ANSI_NULL设置为OFF 去

ALTER DATABASE[NewTest]将ANSI_填充设置为OFF 去

ALTER DATABASE[NewTest]将ANSI_警告设置为关闭 去

ALTER DATABASE[NewTest]将ARITHABORT设置为OFF 去

ALTER DATABASE[NewTest]设置自动关闭 去

ALTER DATABASE[NewTest]在上设置自动创建统计信息 去

ALTER DATABASE[NewTest]设置自动收缩关闭 去

ALTER DATABASE[NewTest]在上设置自动更新统计信息 去

ALTER DATABASE[NewTest]设置游标\u关闭\u打开\u关闭 去

ALTER DATABASE[NewTest]设置游标\u默认全局 去

ALTER DATABASE[NewTest]将CONCAT_NULL设置为关闭 去

ALTER DATABASE[NewTest]将数字设置为“放弃” 去

ALTER DATABASE[NewTest]将QUOTED\U标识符设置为OFF 去

ALTER DATABASE[NewTest]关闭递归_触发器 去

ALTER DATABASE[NewTest]设置禁用\u代理 去

ALTER DATABASE[NewTest]将自动更新统计信息异步设置为OFF 去

ALTER DATABASE[NewTest]设置日期\u相关性\u优化关闭 去

ALTER DATABASE[NewTest]将TRUSTHY设置为OFF 去

ALTER DATABASE[NewTest]设置允许\u快照\u隔离关闭 去

ALTER DATABASE[NewTest]设置参数化简单 去

ALTER DATABASE[NewTest]将已提交的读取快照设置为OFF 去

ALTER DATABASE[NewTest]将荣誉代理优先级设置为OFF 去

ALTER DATABASE[NewTest]设置读写 去

ALTER DATABASE[NewTest]设置恢复已满 去

ALTER DATABASE[NewTest]设置多用户 去

ALTER DATABASE[NewTest]设置页面\u验证校验和

ALTER DATABASE[NewTest]关闭数据库链接 转到

这是查询 选择dbo.patient.patientId、dbo.patient.PName、dbo.test.testName、dbo.groups.groupName、dbo.groups.groupId 从dbo.patient内部连接 dbo.patient.patientId上的dbo.patientDetails=dbo.patientDetails.patientId内部联接 dbo.patientDetails.testId=dbo.test.testId内部联接上的dbo.test dbo.test.groupId=dbo.groups.groupId上的dbo.groups

这是我查询的结果 患者ID姓名测试GROUP\U姓名 1名患者1测试1组1 1名患者1测试2组1 1名患者1测试3组1 2名患者2测试4组2 2名患者2测试5组2 我希望结果是这样的 患者ID名称测试组名称 1名患者1试验1、试验2、试验2组1 2名患者2试验3,试验4组1早安Sameh Awwad

这条线有点乱。我会尽力解释我所理解的,并回答我所理解的问题

首先,我建议删除您试图提供更多信息的额外“答案”。我意识到stackoverflow接口非常差,您不能添加包含格式化代码的注释。我们只能选择添加答案或简单的单行评论。但这些显然不是答案

此外,没有理由发布这些查询。我们不需要查询来创建数据库,我也没有要求这样做。我们需要这些查询来创建与问题相关的原始表、插入样本数据的查询以及用于获取中间结果的查询

据我所知,您有一个查询,可以为您带来以下结果:

patient_name     test_name              group_id

A                  test1                1
A                  test2                1
A                  test3                1
B                  test4                2
B                  test5                2
您希望得到这个中间结果,并得到以下最终结果:

Patient_name    Test_name                  group_id

A               test1, test2, test3          1
B               test4, test5                 2
我们可以从这里继续,但这不是最好的办法。也许我们可以提供更好的解决方案,直接从原始数据到最终结果

无论如何,对于您当前的请求,如果您使用的是SQL Server 2017及更高版本,那么您可以使用函数STRING_AGG,它为您提供了非常简单的解决方案

/*************************************************** DDL+DML */
-- these queries will create the interim result

drop table if exists T;
create table T(patient_name nvarchar(10),test_name nvarchar(10),group_id int)
GO

insert T (patient_name,test_name,group_id)
values 
('A','test1',1),
('A','test2',1),
('A','test3',1),
('B','test4',2),
('B','test5',2)
GO

SELECT patient_name,test_name,group_id
FROM T
GO

/************************************************ solution */
SELECT patient_name,group_id,
    STRING_AGG(test_name, ',') WITHIN GROUP (order by patient_name,group_id,test_name)
from T
group by patient_name,group_id
GO

,其中还包括针对较旧版本SQL Server的解决方案

请发布查询以创建表,并根据示例数据插入一些示例数据+请求的结果这是数据库查询