首页 > 解决方案 > 合并来自表单相同部分的列

问题描述

我的任务是找出可以从填写的表格中输出到 excel 的内容。我想做的是为每个表单制作一行,但问题是表单在数据库中的输入方式。这是当我尝试从以下形式之一的部分(现病史)输出所有列时数据库的外观:https ://imgur.com/a/QKf2XHY它看起来像是包含其他编程语言除了sql。这是表格最初填写时的样子:https ://imgur.com/a/hBRPqDE

现在,我尝试使用以前在此处的另一个用户的帮助下使用的先前代码将要格式化的文本列转换为 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

我现在要做的是为表格的每个部分制作一列。例如,主要投诉是一列,而当前列的历史是另一列(所以我必须结合第一个 imgur 中的“文本”列)。

标签: sqlsql-server

解决方案


推荐阅读