Объедините связанные данные (текст) из нескольких связанных строк в одно поле, чтобы исключить повторяющиеся данные - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь сделать почти то же самое, что и эти вопросы:

Как объединить текст из нескольких строк в одну текстовую строку на сервере SQL?

Имитация функции MySQL group_concat в Microsoft SQL Server 2005?

Я считаю, что я работаю в SQL Server 2005.

Но мне нужно либо, A.)Сделайте это с несколькими таблицами, выделив около 12 столбцов и используя примерно 8 внутренних объединений

или

B.) Сделайте это с запросом, который уже существует с несколькими таблицами (используя примерно 8 внутренних объединений)

Вот текущий запрос:

SELECT        Claim.ClaimID, ClaimStatus.ClaimStatus, Claim.Claimant, Claim.ClaimNumber, ClaimType.ClaimType, Facility.FacilityName, StateOrProvince.State, 
                        MedicalPractitioner.FullName, Claim.ClaimOccurrenceDate, Patient.Allegation, Injury.InjuryDescription AS Injury, GetClaimTotals_vw.[Reserve Total], 
                        ISNULL(GetClaimTotals_vw.[Expense Total], '$0') AS [Paid Total]
FROM            StateOrProvince INNER JOIN
                        MedicalPractitioner INNER JOIN
                        Injury INNER JOIN
                        Patient ON Injury.InjuryID = Patient.Injury INNER JOIN
                        ClaimStatus INNER JOIN
                        ClaimType INNER JOIN
                        Facility INNER JOIN
                        Claim ON Facility.FacilityID = Claim.Facility INNER JOIN
                        GetClaimTotals_vw ON Claim.ClaimID = GetClaimTotals_vw.ClaimID ON ClaimType.ClaimTypeID = Claim.ClaimType ON ClaimStatus.ClaimStatusID = Claim.ClaimStatus ON 
                        Patient.PatientID = Claim.Patient AND Claim.ClaimID = Patient.ClaimNumber INNER JOIN
                        ClaimInsureds ON Claim.ClaimID = ClaimInsureds.ClaimNumber ON MedicalPractitioner.PractitionerID = ClaimInsureds.MedicalPractitioner ON 
                        StateOrProvince.StateOrProvinceID = Facility.StateProvince

ORDER BY ClaimStatus.ClaimStatus

Запрос, который я пробовал, но он просто помещает каждое имя для каждого случая / утверждения и по-прежнему повторяет случаи / утверждения

SELECT  ClaimNumber, Stuff(
  (SELECT N', ' + FullName FROM QueryName_1 FOR XML PATH(''),TYPE)
  .value('text()[1]','nvarchar(max)'),1,2,N'')
FROM QueryName_1

Результат:

Claim# | Status   | MP(s)       

A1002.     Open.       Alex Amond, John Doe, Richard Cool, Jane Smith

A1002.     Open.       Alex Amond, John Doe, Richard Cool, Jane Smith

A1006.     Pending.    Alex Amond, John Doe, Richard Cool, Jane Smith

A1008.     Closed.    Alex Amond, John Doe, Richard Cool, Jane Smith

Etc.

Результат похож на 100-200 строк данных.

В частности, мне нужно Concat в среднем два имени, связанных идентификатором в другой таблице.

Вот пример (я буду использовать Дело № и Адвокаты) снимокt из того, что в данный момент выводится с текущим запросом:

Claim# | Status   | MP(s)       | Etc. |  |....|

A1002.     Open.       John Doe

A1002.     Open.       Alex Almond

A1006.     Pending.  Richard Cool

A1008.     Closed.    Jane Smith

Etc.

Что мне нужно:

Claim# | Status    | MP(s).                           | Etc. |. | ... | 

A1002.     Open.       John Doe, Alex Almond

A1006.     Pending.  Richard Cool

A1008.     Closed.    Jane Smith

Etc.

Спасибо.

1 Ответ

0 голосов
/ 12 апреля 2019

Измененный запрос

 stuff((
SELECT 

                   ', ' +     MedicalPractitioner.FullName 
FROM            StateOrProvince INNER JOIN
                        MedicalPractitioner INNER JOIN
                        Patient INNER JOIN
                        CS CS INNER JOIN
                        ClaimType INNER JOIN
                        Facility INNER JOIN
                        Claim C ON Facility.FacilityID = c.Facility 
                        INNER JOIN   GetClaimTotals_vw ON c.ClaimID = GetClaimTotals_vw.ClaimID ON ClaimType.ClaimTypeID = c.ClaimType ON CS.ClaimStatusID = c.ClaimStatus ON Patient.PatientID = c.Patient AND 
                        c.ClaimID = Patient.ClaimNumber INNER JOIN
                        ClaimInsureds ON c.ClaimID = ClaimInsureds.ClaimNumber ON MedicalPractitioner.PractitionerID = ClaimInsureds.MedicalPractitioner ON StateOrProvince.StateOrProvinceID = Facility.StateProvince
where  c.ClaimID =  Claim.ClaimID 
group by C.ClaimID, CS.ClaimStatus
for xml path('')),1,1,'') full name

Попробуйте использовать stuff и xml path

SELECT 
Claim.ClaimID, ClaimStatus.ClaimStatus, Claim.Claimant, Claim.ClaimNumber AS [Claim Number], ClaimType.ClaimType AS [Claim Type], Facility.FacilityName AS [Loss Location], StateOrProvince.State, 
                        MedicalPractitioner.FullName AS Insureds, Claim.ClaimOccurrenceDate AS [Occurrence Date], Patient.Allegation, Patient.Injury, GetClaimTotals_vw.[Reserve Total], ISNULL(GetClaimTotals_vw.[Expense Total], '$0') 
                        AS [Paid Total],

 stuff((
SELECT 

                   ', ' +     MedicalPractitioner.FullName 
FROM            StateOrProvince INNER JOIN
                        MedicalPractitioner INNER JOIN
                        Patient INNER JOIN
                        CS CS INNER JOIN
                        ClaimType INNER JOIN
                        Facility INNER JOIN
                        Claim C ON Facility.FacilityID = c.Facility 
                        INNER JOIN   GetClaimTotals_vw ON c.ClaimID = GetClaimTotals_vw.ClaimID ON ClaimType.ClaimTypeID = c.ClaimType ON CS.ClaimStatusID = c.ClaimStatus ON Patient.PatientID = c.Patient AND 
                        c.ClaimID = Patient.ClaimNumber INNER JOIN
                        ClaimInsureds ON c.ClaimID = ClaimInsureds.ClaimNumber ON MedicalPractitioner.PractitionerID = ClaimInsureds.MedicalPractitioner ON StateOrProvince.StateOrProvinceID = Facility.StateProvince
where  c.ClaimID =  Claim.ClaimID 
group by C.ClaimID, CS.ClaimStatus
for xml path('')),1,1,'') full name




FROM            StateOrProvince INNER JOIN
                        MedicalPractitioner INNER JOIN
                        Patient INNER JOIN
                        ClaimStatus INNER JOIN
                        ClaimType INNER JOIN
                        Facility INNER JOIN
                        Claim ON Facility.FacilityID = Claim.Facility 
                        INNER JOIN   GetClaimTotals_vw ON Claim.ClaimID = GetClaimTotals_vw.ClaimID ON ClaimType.ClaimTypeID = Claim.ClaimType ON ClaimStatus.ClaimStatusID = Claim.ClaimStatus ON Patient.PatientID = Claim.Patient AND 
                        Claim.ClaimID = Patient.ClaimNumber INNER JOIN
                        ClaimInsureds ON Claim.ClaimID = ClaimInsureds.ClaimNumber ON MedicalPractitioner.PractitionerID = ClaimInsureds.MedicalPractitioner ON StateOrProvince.StateOrProvinceID = Facility.StateProvince
ORDER BY ClaimStatus.ClaimStatus
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...