【问题标题】:Concatenate SQL strings based on连接基于 SQL 字符串
【发布时间】:2016-11-22 13:34:29
【问题描述】:

我目前有这些数据:

appointment_num  order_num modified_proc_desc
"124"             "1"   "DIVISION OF PENILE SKIN BRIDGE"
"125"             "1"   "CIRCUMCISION"
"126"             "1"   "BILATERAL INGUINAL EXPLORATION"
"126"             "2"   "BILATERAL INGUINAL HERNIA/HYDROCELE REPAIR"
"126"             "3"   "POSSIBLE RIGHT ORCHIOPEXY"
"127"             "1"   "EXCISION SCALP CYST"
"128"             "1"   "REPAIR INCOMPLETE CIRCUMCISION"
"129"             "1"   "CIRCUMCISION"

由此表/查询产生:

SELECT [appointment_num]
      ,[order_num]
      ,[modified_proc_desc]
FROM [adv].[dbo].[as_appointment_procs]

我可以根据与 XML PATH ('') 相同的 order_num 将 modified_proc_desc 字段连接在一起。我需要能够按顺序加入他们。例如,对于上面的约会编号“126”,我希望将 order_num 1、2 和 3 的 modified_proc_desc 字符串连接到一个新的 case_procedure 字段上。换句话说,我只想显示一个包含所有订单的约会。

任何人都可以在这里指出正确的方向吗?这是一个示例输出:

appointment_num  order_num case_procedure
"124"             "1"   "DIVISION OF PENILE SKIN BRIDGE"
"125"             "1"   "CIRCUMCISION"
"126"             "1"   "BILATERAL INGUINAL EXPLORATION, BILATERAL INGUINAL HERNIA/HYDROCELE REPAIR, POSSIBLE RIGHT ORCHIOPEXY"
"127"             "1"   "EXCISION SCALP CYST"
"128"             "1"   "REPAIR INCOMPLETE CIRCUMCISION"
"129"             "1"   "CIRCUMCISION"

【问题讨论】:

标签: sql sql-server


【解决方案1】:

一种方法是创建一个内联子查询以将值组合到一行中:

SELECT DISTINCT 
    appointment_num,
    STUFF(
        (SELECT ', ' + p2.modified_proc_desc
        FROM as_appointment_procs p2
        WHERE p2.appointment_num = p.appointment_num
        ORDER BY p2.order_num
        FOR XML PATH(''), type).value('(./text())[1]','varchar(max)') 
        ,1,2,'') AS case_procedure
FROM as_appointment_procs p

STUFF 命令删除前导逗号。

【讨论】:

  • 这里我建议SELECT appointment_num .... GROUP BY appointment_num,而不是SELECT DISTINCT appointment_num...,因为处理顺序。如果您使用GROUP BY,它将首先删除重复项,然后为appointment_num 的每个唯一值执行子查询,而DISTINCT 将为每一行评估一次子查询,然后将删除重复项。它可能不会产生重大影响,但它可能会再次产生影响,而且每一点都会有所帮助。
  • 谢谢,这正是我想要的。感谢教育。我也会在这里查看 GarethD 的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
相关资源
最近更新 更多