【问题标题】:group_concat and distinct in mssql 2012mssql 2012 中的 group_concat 和 distinct
【发布时间】:2020-11-14 04:58:04
【问题描述】:

如何在 ms sql 2012 中对不同数据使用 group_concat 函数?

这对 mssql 可行吗?有人可以帮我把这个mysql查询翻译成mssql吗?这将是一个很大的帮助。谢谢:)

SELECT
    a.`patid` AS PatNum,
    GROUP_CONCAT(DISTINCT(CONCAT(b.`adacode`)) SEPARATOR ', ') AS tx_plans,
    GROUP_CONCAT(DISTINCT(a.`provid`) SEPARATOR ', ') AS provider_ids,
    GROUP_CONCAT(DISTINCT(CONCAT(c.`last_name`, ', ', c.`first_name`)) SEPARATOR ' | ') as providers
FROM
fullproclog a
  INNER JOIN proccode b 
    ON a.`proccodeid` = b.`proccodeid`
  LEFT JOIN v_provider c 
    ON a.`provid` = c.`provider_id`
WHERE 1 = 1
    AND a.`chartstatus` = 102
    AND a.`procdate` = DATE('2020-07-02')
GROUP BY a.`patid`, a.`provid`

【问题讨论】:

标签: sql sql-server group-concat string-aggregation


【解决方案1】:

您可以将STRING_AGG() 与窗口函数一起使用:

SELECT patid,
       STRING_AGG(CASE WHEN seqnum_a = 1 THEN adacode END, ', ') AS tx_plans,
       STRING_AGG(CASE WHEN seqnum_p = 1 THEN provid, ', ') AS provider_ids,
       STRING_AGG(CASE WHEN seqnum_n = 1 THEN CONCAT(last_name, ', ', first_name)), '|') as as providers

FROM (SELECT fpc.patid AS PatNum,
             ROW_NUMBER() OVER (PARTITION BY fpc.patid, pc.adacode ORDER BY fpc.patid) as seqnum_a,
             ROW_NUMBER() OVER (PARTITION BY fpc.patid, fpc.provid ORDER BY fpc.patid) as seqnum_p,
             ROW_NUMBER() OVER (PARTITION BY fpc.patid, fpc.provid, CONCAT(p.last_name, ', ', p.first_name) ORDER BY fpc.patid) as seqnum_n
      FROM fullproclog fpc
           proccode pc
           ON fpc.proccodeid = pc.proccodeid LEFT JOIN
           v_provider p
           ON a.provid = c.pprovider_id
      WHERE fpc.chartstatus = 102 AND
            fpc.procdate = '2020-07-02'
     ) p
GROUP BY fpc.patid;

【讨论】:

  • 不,不幸的是,OP 不能这样做,因为它使用的是 SQL Server 2012。但无论如何我都会投票赞成,因为它可能对其他人有用。
  • @TimBiegeleisen 。 . .这个问题在我开始回答后被编辑了,唉。
  • 是的...当我意识到工作量时我停下来,并且还感觉到它可能是一个旧版本:-)
猜你喜欢
  • 2018-09-21
  • 2021-01-30
  • 2011-03-06
  • 2021-10-24
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 2015-02-21
相关资源
最近更新 更多