Объединение строк заявки для уникальных значений - PullRequest
0 голосов
/ 01 июня 2018

Я работаю с медицинскими заявками, где один номер заявки может содержать до 75 строк.Каждая заявка имеет код, который предопределяет, как обрабатывается заявка, и что мне нужно сделать как для статистики, так и для эффективной обработки дела, это объединить все эти строки вместе и получить только уникальные значения - некоторые заявки могут иметь 20-30 строк с точно такой жекоды, и мне, очевидно, просто нужно знать, что эти два кода, а не каждая отдельная строка.Я чувствую, что это простое решение, но оно просто ускользает от моего понимания.

Исходные данные:

Claim Number    EX1 Ex2 Ex3 Ex4 Ex5 Ex6
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  IK  D3  AP  1O    
123456789123    LP  DU  1O            
123456789123    LP  IK  D3  AP  1O    
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  IK  D3  AP  1O    
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  IK  D3  AP  1O    
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  IK  D3  AP  1O    
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  IK  D3  AP  1O    
123456789123    LP  DU  1O            
123456789123    LP  DP  AP  1O        
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            
123456789123    LP  DU  1O            

Выбор отличительных:

Claim Number    EX1 Ex2 Ex3 Ex4 Ex5 Ex6
123456789123    LP  DP  AP  1O        
123456789123    LP  DU  1O            
123456789123    LP  IK  D3  AP  1O    

Но что япоиск будет выглядеть примерно так:

Claim Number    Codes
123456789123    LP,DP,AP,1O,DU,IK,D3  

Единственное решение, которое я могу придумать, - это создать большую текстовую строку, добавив столбец строки, поместив их в свою собственную таблицу / подзапрос и добавив их вместе, но явсе равно получу дубликаты всех кодов EX.Кроме того, я не знаю, сколько строк может быть в заявке, поэтому код будет многократным и длинным для такого количества.Я мог бы искать конкретные утверждения, если бы я просто превратил коды в длинную текстовую строку, но я чувствую, что есть более элегантное решение.

Я пытался найти этот вопрос, но, возможно, яне знаю точно, что я ищу, так что извините, если это повторение того, о чем уже спрашивали.Я должен также сказать, что любой sql, который я узнал, был в основном основан на том, что мне нужно было сделать, если этот вопрос является базовым, я прошу прощения>.>

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Версия SQL Server 2012:

with CTE as (
    select distinct [Claim_Number], [EX1] ex from TestTable
    union select [Claim_Number], [EX2] ex from TestTable
    union select [Claim_Number], [EX3] ex from TestTable
    union select [Claim_Number], [EX4] ex from TestTable
    union select [Claim_Number], [EX5] ex from TestTable
    union select [Claim_Number], [EX6] ex from TestTable
)
select [Claim_Number],
  Codes = STUFF((SELECT  ','+cast([ex] AS VARCHAR ) FROM  CTE t WHERE  C.[Claim_Number]  = t.[Claim_Number]  FOR XML PATH('')),1,1,'') 
from CTE C
group by Claim_Number

Dido Link для SQL Fiddle


PS.Вы можете сделать это в SQL Server 2017

попробуйте "использовать uion и Group by Claim_Number + STRING_AGG"

select [Claim_Number],STRING_AGG ( ex, ',')
from (
    select [Claim_Number], [EX1] ex from TestTable
    union select [Claim_Number], [EX2] ex from TestTable
    union select [Claim_Number], [EX3] ex from TestTable
    union select [Claim_Number], [EX4] ex from TestTable
    union select [Claim_Number], [EX5] ex from TestTable
    union select [Claim_Number], [EX6] ex from TestTable
) T
group by Claim_Number

SQL Fiddle DEMO LINK

0 голосов
/ 01 июня 2018

Если я правильно понимаю, вы можете отключить, а затем объединить коды:

with oc as (
      select distinct claim, ex
      from original o cross apply
           (values (ex1), (ex2), (ex3), (ex4), (ex5)) v(ex)
     )
select o.claim,
       stuff( (select ',' + ex
               from oc
               where oc.claim = o.claim
               for xml path ('')
              ), 1, 1, ''
            ) as codes
from (select distinct claim
      from original o
     ) o;
...