【问题标题】:SQL SERVER FOR XML PATH - Exporting data to excel using Integration ServicesSQL SERVER FOR XML PATH - 使用集成服务将数据导出到 excel
【发布时间】:2018-06-27 05:47:56
【问题描述】:

使用下面的 SO 和代码的帮助:

select t1.*,
       stuff( (select '; ' + coalesce(data1, '') + ',' + coalesce(data2, '')
               from table2 t2
               where t2.FK_TBL1_ID = t1.id
               for xml path ('')
              ), 1, 2, ''
            ) as Data1Data2
from table1 t1;

在我的 sql 视图中,我成功地将多行多列组合成一行一列。

我最终想要实现的是,当在下面的 excel 单元格中查看时,能够为每一行与多列组合,为新记录(行)换行:

**Data1Data2Cell**

  aaaa, bbbb; 
  cccc, dddd;
    ....

在 Excel 中使用每个单元格上的 ALT+ENTER 可以实现相同的功能。

我尝试使用 Char(10) 和 Char(13) 无济于事。

【问题讨论】:

  • 您还应该向我们展示您当前的输出,然后告诉我们它有什么问题。
  • Data1Data2Cell aaaa,bbbb; cccc, dddd; 记录在同一行,而不是每个新行

标签: sql sql-server excel ssis for-xml-path


【解决方案1】:

你应该把你的第一行东西改成这个

 stuff( (select CHAR(10)+ coalesce(data1, '') + ',' + coalesce(data2, '')+'; '

这将在字符串中正确引入必要的换行符。

working demo here

请注意,当您在 SSMS 中运行此查询时,您可能无法正确看到结果,因为通常结果会显示在如下网格视图中

要获得正确的视图,您应该通过按 cntrl+ t 或单击顶部菜单中的查询选项将查询结果更改为文本视图(见下面的屏幕截图)

最后,您的查询将为您提供正确的结果视图,如下所示

【讨论】:

  • 谢谢乔希!我对上述代码的问题(以及我看起来的初始代码)是,从 db 行中,我试图在一个单元格中放入“职责描述”,当有人输入许多职责并按 Enter 键将它们隔开时,使用上面的查询我得到'aaaa; bbbb, bb cc dd;在excel中这是不正确的。我如何逃避“输入”,使其保持在同一行,同时避免在我的结果中显示“ ”?
  • 我想我通过将代码更改为... coalesce(REPLACE(REPLACE([Data2], CHAR(13),' '), CHAR(10),' '), '') ...来解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多