【问题标题】:how to insert a line break after every second loop in t-sql stuff function如何在 t-sql 东西函数中的每一秒循环后插入换行符
【发布时间】:2022-01-15 04:14:16
【问题描述】:

如何在我的查询中的 t-sql stuff 函数的每个第二个循环之后插入一个 CHAR(10)

  SELECT  STUFF(
                (
                    SELECT  ', ' + new_name 
                   FROM new_subcatagories
                   FOR XML PATH(''), TYPE
                ).value('.', 'VARCHAR(MAX)'), 1, 2, '')

所以结果应该是

记录1,记录2,

记录3,记录4

【问题讨论】:

  • 旁注:以上不是“循环”,它是基于集合的解决方案。循环/迭代解决方案将涉及WHILE 或 rCTE;这在 SQL 中会显着降低性能。

标签: sql sql-server tsql string-aggregation


【解决方案1】:

您可以使用CASE 表达式来查看ROW_NUMBER 的值是否可以被2 整除,如果不能,则添加回车和换行符:

SELECT STUFF((SELECT CASE WHEN ROW_NUMBER() OVER (order by new_nam) % 2 = 1 THEN CHAR(13) + CHAR(10) ELSE '' END + ', ' + new_nam
              FROM new_subcatagories
              ORDER BY new_nam
              FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 4, '');

【讨论】:

  • 嗨 larnu,感谢您的帮助,对不起,我对 sql 很陌生,它在我的第一个查询中运行良好,但我现在想将它用于需要区分它的其他查询,因为在我的情况下,它可以是多个具有相同名称的记录,在这种情况下它不起作用这里是查询 STUFF(( SELECT distinct CASE WHEN ROW_NUMBER() OVER (order by new_maincatgoriesname) % 2 = 1 THEN CHAR(10) ELSE ',' END + new_maincatgoriesname FROM new_subcatagories FOR XML PATH('')), 1, 1, '')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多