【问题标题】:SQL Server 2016 - Transpose column of integers to row by daySQL Server 2016 - 将整数列逐日转置为行
【发布时间】:2020-06-28 19:29:53
【问题描述】:

我需要将数据日期中的一列转置为一行字符串并按其他 2 列分组。我的样本数据包含以下数据:

我需要这样的结果:

这是每天每个员工代码一行中的所有逻辑节点。

我尝试了下面的代码 -

DECLARE @Process_Conditions_Loans VARCHAR(500)

SELECT
    t1.EmplCode,
    t1.LogDate,
    @Process_Conditions_Loans = CONCAT(COALESCE(@Process_Conditions_Loans + ',', ''),PS2)
FROM
    #temp t1
WHERE
    LN IS NOT NULL 
GROUP BY
    EmplCode, LogDate

但我遇到了一个错误

为变量赋值的 SELECT 语句不得与数据检索操作结合使用。

我无法使用group_concat,因为我使用的是 SQL Server 2016。

任何帮助将不胜感激。

谢谢, JH

【问题讨论】:

  • 对不起,我的意思是 SQL Server 2016。

标签: sql tsql sql-server-2016


【解决方案1】:

您可以使用旧形式的字符串聚合:

select emplcode, logdate,
       stuff( (select concat(', ', ln)
               from t
               where t.emplcode = el.emplcode and t.logdate = el.logdate
               order by ln
               for xml path ('')
              ), 1, 2, ''
            )
from (select distinct emplcode, logdate
      from t
     ) el

【讨论】:

  • @JHegde 。 . .你能设置一个 db fiddle 来说明这一点吗?
  • 是的,我会这样做的。谢谢。
  • 您的代码在我的示例日期上运行良好。刚刚意识到实际数据的 logdate 带有时间戳,这把它搞砸了。非常感谢提供代码,不胜感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多