【问题标题】:I need to write a SQL Server query. to get same name column values of a table in a single row我需要编写一个 SQL Server 查询。在单行中获取表的同名列值
【发布时间】:2020-01-16 14:06:16
【问题描述】:

我的 SQL Server 表有三列:

Customer     Name               SOW
---------------------------------------
100068       Teradyne           59140
100068       Teradyne           63396
100068       Teradyne           38999
100057       CISCO              58056

输出应该是这样的:

Customer     Name          SOW
----------------------------------------------------
100068       Teradyne      59140, 63396, 38999, 60
100057       CISCO         58056

属于同一name 值的所有SOW 列值应位于一行中,如上所示。

我需要编写一个 SQL 查询来实现上述输出。

下面是我写的查询,

SELECT 
   SS.[Name],
   STUFF((SELECT '; ' + US.[SOW] 
          FOR XML PATH('')), 1, 1, '') [SOW]
FROM 
    TBL_MSA_SOW SS

【问题讨论】:

  • 好的,太好了 - 你能告诉我们到目前为止做了什么吗?你被困在哪里了?你目前的结果是什么??
  • 嗨,Marc,尝试使用 stuff 函数,但无法获得所需的输出
  • 相信 Marc 会这样做的。
  • 您在STUFF 中缺少FROM - 您从哪个表中选择这些行?您在 US.[SOW] 列上使用了 US 别名 - 但在 FROM 子句中从来没有 table 具有此别名.....

标签: sql-server-2012


【解决方案1】:

您的“内部”选择不完整 - 您在 SELECT 列列表中使用了 US 表别名 - 但从来没有一个 FROM 子句有一个具有该别名的表......

此外,您没有将外部 SELECT 列表与内部查询“链接”。

试试这样的:

SELECT DISTINCT
   SS.[Name],
   STUFF((SELECT '; ' + US.[SOW] 
          FROM TBL_MSA_SOW US
          WHERE US.Customer = SS.Customer
          FOR XML PATH('')), 1, 1, '') [SOW]
FROM 
    TBL_MSA_SOW SS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多