Объединить дубликат (группу строк) в отчете rdlc

У меня есть 3 таблицы базы данных с именами пациентов, тестов и групп

В таблице пациентов есть столбцы с именем пациента и test_Id.

в тестовой таблице есть test_id, test_name и group_id

в таблице групп есть group_Id и group_Name,

и я сделал SQL-запрос, который приносит все данные в 3 таблицы с учетом отношений между 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

Это мой пример, я пытался сделать Join с функциями Lookupset

Успешно, но повторение строки с номерами тестов - если у пациента 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

Я хочу, чтобы результат был в одной строке для каждого пациента.

Извините за длинный вопрос, но я хотел прояснить мою ситуацию.

Пожалуйста, отправьте запросы, чтобы создать таблицу (ы) и вставить некоторые образцы данных + запрошенный результат в соответствии с образцами данных

Ronen Ariely 04.08.2018 15:02

это запрос к базе данных

Sameh Awwad 04.08.2018 15:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
201
3

Ответы 3

ИСПОЛЬЗУЙТЕ [мастер] ИДТИ

/ ****** Объект: База данных [NewTest] Дата сценария: 08.04.2018 15:36:09 ****** / СОЗДАТЬ БАЗУ ДАННЫХ [NewTest] НА ОСНОВНОЙ (NAME = N'NewTest ', FILENAME = N'C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ NewTest.mdf', SIZE = 3072KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) ВОЙТИ (NAME = N'NewTest_log ', FILENAME = N'C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ NewTest_log.ldf', SIZE = 1024 КБ, MAXSIZE = 2048 ГБ, FILEGROWTH = 10% ) ИДТИ

ALTER DATABASE [NewTest] SET COMPATIBILITY_LEVEL = 100 ИДТИ

ЕСЛИ (1 = FULLTEXTSERVICEPROPERTY ('IsFullTextInstalled')) начинать EXEC [NewTest]. [Dbo]. [Sp_fulltext_database] @action = 'enable' конец ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ ANSI_NULL_DEFAULT ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ ANSI_NULLS ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ ANSI_PADDING ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ ANSI_WARNINGS ИДТИ

ИЗМЕНИТЬ БАЗУ ДАННЫХ [NewTest] ВЫКЛЮЧИТЬ ARITHABORT ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ AUTO_CLOSE ИДТИ

ALTER DATABASE [NewTest] ВКЛЮЧИТЬ AUTO_CREATE_STATISTICS ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ AUTO_SHRINK ИДТИ

ALTER DATABASE [NewTest] ВКЛЮЧИТЬ AUTO_UPDATE_STATISTICS ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ CURSOR_CLOSE_ON_COMMIT ИДТИ

ALTER DATABASE [NewTest] SET CURSOR_DEFAULT GLOBAL ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ CONCAT_NULL_YIELDS_NULL ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ NUMERIC_ROUNDABORT ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ QUOTED_IDENTIFIER ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ RECURSIVE_TRIGGERS ИДТИ

ALTER DATABASE [NewTest] SET DISABLE_BROKER ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ AUTO_UPDATE_STATISTICS_ASYNC ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ DATE_CORRELATION_OPTIMIZATION ИДТИ

ИЗМЕНИТЬ БАЗУ ДАННЫХ [NewTest] ВЫКЛЮЧИТЬ ДОВЕРИТЕЛЬНО ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ ALLOW_SNAPSHOT_ISOLATION ИДТИ

ИЗМЕНИТЬ БАЗУ ДАННЫХ [NewTest] УСТАНОВИТЬ ПРОСТОЙ ПАРАМЕТРИЗАЦИЮ ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ READ_COMMITTED_SNAPSHOT ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ HONOR_BROKER_PRIORITY ИДТИ

ALTER DATABASE [NewTest] SET READ_WRITE ИДТИ

ALTER DATABASE [NewTest] SET RECOVERY FULL ИДТИ

ALTER DATABASE [NewTest] SET MULTI_USER ИДТИ

ALTER DATABASE [NewTest] SET PAGE_VERIFY CHECKSUM
ИДТИ

ALTER DATABASE [NewTest] ВЫКЛЮЧИТЬ DB_CHAINING ИДТИ

Это запрос ВЫБЕРИТЕ dbo.patient.patientId, dbo.patient.PName, dbo.test.testName, dbo.groups.groupName, dbo.groups.groupId ОТ dbo.patient ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.patientDetails ON dbo.patient.patientId = dbo.patientDetails.patientID ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.test ON dbo.patientDetails.testId = dbo.test.testId ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.groups ON dbo.test.groupId = dbo.groups.groupId

это результат моего запроса Имя пациента ID Тест Gruop_name 1 пациент 1 Тест 1 Группа 1 1 пациент 1 Тест 2 Группа 1 1 пациент1 Тест3 Группа1 2 пациент2 Тест4 Группа2 2 пациент2 Тест5 Группа2 Я хочу, чтобы результат был таким Имя_ пациента Имя_группы тестирования 1 пациент1 Тест1, Тест2, Тест2 Группа1 2 пациент2 Тест3, Тест4 Группа1

Доброго времени суток Самех Аввад,

Это нить немного беспорядка. Я постараюсь объяснить, что я понимаю, и ответить на вопрос, который я понимаю.

Во-первых, я рекомендую удалить лишние «ответы», в которых вы пытались предоставить дополнительную информацию. Я понимаю, что интерфейс 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

Другие вопросы по теме