Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将Select的几个返回字符压缩为单个字符串_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将Select的几个返回字符压缩为单个字符串

Sql 将Select的几个返回字符压缩为单个字符串,sql,sql-server,tsql,Sql,Sql Server,Tsql,简单地说,我有一个select,它将返回多个单个字符,因此不起作用。有没有办法将所有单个字符组合成一个可返回的字符串 我目前缓慢而丑陋的解决方案: ,'('+(Select Left(max(AE_D1),1) FROM ACCESS_EVENTS WHERE LEFT(AE_D1,1) like 'W' AND replace(HR.firstname,' ','')+' '+replace(HR.lastname, ' ','') LIKE Le

简单地说,我有一个select,它将返回多个单个字符,因此不起作用。有没有办法将所有单个字符组合成一个可返回的字符串

我目前缓慢而丑陋的解决方案:

,'('+(Select Left(max(AE_D1),1) 
        FROM ACCESS_EVENTS
      WHERE LEFT(AE_D1,1) like 'W'
        AND replace(HR.firstname,' ','')+' '+replace(HR.lastname, ' ','') LIKE Left(AE_D2,len(replace(HR.firstname,' ','')+' '+replace(HR.lastname, ' ','')))) +')'
+'('+(Select Left(max(AE_D1),1) 
        FROM ACCESS_EVENTS
       WHERE LEFT(AE_D1,1) like 'M'
         AND replace(HR.firstname,' ','')+' '+replace(HR.lastname, ' ','') LIKE Left(AE_D2,len(replace(HR.firstname,' ','')+' '+replace(HR.lastname, ' ','')))) +')'
。重复上述步骤,直到覆盖所有案例


编辑-额外信息:每个“W”或“M”是访问事件名称的第一个字符,与事件发生的位置有关。大约有9个不同的事件角色需要涵盖。查询的目的是显示一个人何时有来自多个与其姓名关联的区域的事件。现在的问题只是要清晰地显示它。

索引视图是否可以用于所需的数据


我想您需要阅读。

所有这些字符串操作都会导致索引无法使用,这就是为什么数据不应该这样存储……是的,HR表还有很多需要改进的地方。然而,我没有能力去解决它您要查找的案例是什么?您应该能够修复此查询,但我们只有您要查找的内容的快照。您能否提供更多关于某些源数据的外观以及您希望最终结果的外观的信息?我们可以做1个可索引的查询。目标是生成类似于员工姓名|员工终端|事件终端John Doe | Winnipeg | WCM的内容这将是一个员工的“家庭”终端将是Winnipeg,但可以在其他终端访问来自他们的事件。为了获取员工终端和事件终端信息,两个表分别引用了“HR”作为名称和终端,以及“ACCESS\u EVENTS”作为访问事件和事件位置。HR没有任何索引列,因此名称被拼凑在一起。我希望这些帮助我不知道,我对更高级的sql操作没有太多经验。非常感谢。这是一个很好的例子来源和解决问题的不同方法。