合并表单中相同部分的列

时间:2019-08-16 15:14:02

标签: sql sql-server

我的任务是从填写的表格中找出可以输出的出类拔萃的内容。我想做的是为每个表单创建一行,但是问题是表单在数据库中的输入方式。这是当我尝试从以下其中一种形式的部分(当前疾病的历史)中输出所有列时的数据库外观:https://imgur.com/a/QKf2XHY它看起来还包含除sql之外的其他编程语言。填写后的原始形式如下:https://imgur.com/a/hBRPqDE

现在,我尝试在其他用户的帮助下,使用之前使用的先前代码将Text列转换为varchar格式,但在这种情况下无法正常工作。

SET ANSI_WARNINGS ON

Select A.IDEncounter_Note
      ,FormatMessage = ltrim(rtrim(replace(replace(replace(TxtOnly,' ','†‡'),'‡†',''),'†‡',' ')))
 From  Encounter_Note A
 Cross Apply ( values ( --replace(
                        replace(
                        replace(
                        replace(
                        replace(
                        replace('<div>'+CONVERT(VARCHAR(MAX),Text)+'</div>'
                        ,char(13),' ')
                        ,char(10),' ') 
                        ,'&'+'nbsp;',' ')
                        ,'&'+'amp;','&')
                        ,'&'+'rsquo;','''')
                        --,'<o:p></o:p>','')-- May want to add items like — as -  and ™ as TM etc...
                      ) 
              ) B(CleanString)
 Cross Apply (
                Select TxtOnly = stuff((Select ' ' +RetVal 
                                         From  (
                                                Select RetSeq 
                                                      ,RetVal = left(RetVal,charindex('<',RetVal+RetVal)-1)
                                                 From  (
                                                        Select RetSeq = row_number() over (order by 1/0)
                                                              ,RetVal = ltrim(rtrim(B.i.value('(./text())[1]', 'varchar(max)')))
                                                        From  ( values (cast('<x>' + replace((Select replace(CleanString,'>','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.'))) as A(x)
                                                        Cross Apply x.nodes('x') AS B(i)
                                                       ) C1
                                                Where charindex('<',RetVal)>1
                                               ) C2
                                         Order By RetSeq
                                         For XML Path(''),TYPE).value('(./text())[1]','varchar(max)')
                                        ,1,1,'') 
             ) C
WHERE EncounterID = 89617

我现在想做的是为表单的每个部分填写一列。例如,首席投诉是一栏,而当前栏的历史是另一栏(因此,我必须结合第一张图片中的“文本”栏)。

0 个答案:

没有答案