我想在 SQL Server 中执行 group_concat

2023-11-29

I know group_concat在 SQL Server 2008 中不起作用,但我想做group_concat.

我的样本数据如下所示:

email address         | product code   
----------------------+---------------
[email protected]    | A123A  
[email protected]    | AB263    
[email protected]    | 45632A   
[email protected]    | 78YU
[email protected]    | 6543D 

我想要这个结果:

[email protected] | A123A,AB263,6543D 
[email protected] | 45632A,78YU

我尝试过的代码:

SELECT
    c.EmailAddress,
    od.concat(productcode) as Product_SKU
FROM
    OrderDetails od
JOIN 
    Orders o ON od.OrderID = o.OrderID 
JOIN 
    Customers c ON c.CustomerID = o.CustomerID
WHERE
    o.OrderDate BETWEEN 01/01/2016 AND GETDATE()
GROUP BY 
    c.EmailAddress

我收到错误:

找不到列“od”或用户定义函数或聚合“od.concat”,或者名称不明确。

但这是行不通的。谁能告诉我正确的做法吗?

编辑后我正在尝试的代码:

SELECT
    c.EmailAddress,
    productcode = STUFF((SELECT ',' + od.productcode
                         FROM Orderdetails od
                         WHERE c.EmailAddress = od.EmailAddress
                         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM
    OrderDetails od
JOIN 
    Orders o ON od.OrderID = o.OrderID 
JOIN 
    Customers c ON c.CustomerID = o.CustomerID
WHERE
    o.OrderDate BETWEEN 01/01/2016 AND GETDATE()

现在我收到此错误:

列名“EmailAddress”无效。


为您展示连接(在本例中为自连接,但所有连接都有效)并为此使用 STUFF。注意 STUFF 中的 WHERE 子句。这就是将记录链接到正确值的原因。

declare @test table
(
email varchar(50),
address varchar(50)
)

insert into @test VALUES
('[email protected]','A123A'),  
('[email protected]','AB263'),   
('[email protected]','45632A'),   
('[email protected]','78YU'),
('[email protected]','6543D')

SELECT DISTINCT 
       email,
       Stuff((SELECT ', ' + address  
              FROM   @test t2 
              WHERE  t2.email  = t1.email  
              FOR XML PATH('')), 1, 2, '') Address
FROM   @test t1  

Edit

好吧,你想要的(你真正想要的)是:

declare @customers table
(
emailaddress varchar(50),
customerid int
)

insert into @customers VALUES
('[email protected]',1),  
('[email protected]',2)   

declare @orders table
(
orderid int,
customerid int,
orderdate date
)

insert into @orders VALUES
(1, 1, '2017-06-02'),
(2, 1, '2017-06-05'),
(3, 1, '2017-07-13'),
(4, 2, '2017-06-13')

declare @orderdetails table
(
id int,
orderid int,
productcode varchar(10)
)

insert into @orderdetails VALUES
(1, 1, 'apple pie'),
(2, 1, 'bread'),
(3, 2, 'custard'),
(4, 2, 'orange'),
(5, 3, 'orange'),
(6, 4, 'orange')

SELECT DISTINCT c.EmailAddress, productcode=
STUFF((SELECT ',' + odc.productcode FROM 
(SELECT DISTINCT emailaddress,productcode FROM 
@orders o2 inner join @orderdetails od2 on
o2.orderid = od2.orderid
inner join @customers c2 ON c2.customerid = o2.customerid) odc 
WHERE odc.emailaddress=c.emailaddress 
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM @OrderDetails od 
JOIN @Orders o ON od.OrderID = o.OrderID 
JOIN @Customers c ON c.CustomerID=o.CustomerID 
WHERE o.OrderDate BETWEEN '2016-01-01' AND getdate()

注意这里的变化。 STUFF 中的 SELECT 现在来自子查询,以便您可以按 EmailAddress 进行分组。

附加说明

您的目标是按客户(由电子邮件地址表示)分组的产品代码串联。问题是产品代码位于 orderdetails 表中,电子邮件地址位于 customer 表中,但没有链接这两者的字段。客户表与订单表具有一对多关系,订单表与订单详细信息表具有一对多关系。这是一个过多的抽象层次。因此,我们需要通过提供产品代码和电子邮件地址之间的直接链接来为数据库提供帮助。我们通过子查询来完成此操作。我希望这能让你更清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我想在 SQL Server 中执行 group_concat 的相关文章

  • 了解 SQL Server 排序规则中的 Unicode 和代码页

    为什么所有 SQL Server 2008 R2 排序规则都与代码页相关联 所有排序规则都是 unicode 吗 当您的数据库被使用不同代码页的多种语言使用时 如何选择排序规则 谢谢 CHAR 与 NCHAR 即非 Unicode 与 Un
  • SQL Server - SQL 替换整个数据库中所有表中的所有列

    这是一个很遥远的事情 我猜这个问题没有简单的答案 但是 我继承了一个数据库 其中填充了一些可怕的数据 许多包含描述的行都有回车符 这意味着当我们 BCP 输出数据时 它会带有回车符 我的问题 有没有办法在 MS SQL Server 中对整
  • INNER/RIGHT/LEFT JOIN 怎么会比 FULL JOIN 慢 14 倍?

    我有一个查询 使用 FULL JOIN 需要 2 5 秒 使用 INNER RIGHT 或 LEFT JOIN 需要 40 秒 这是查询 子查询 完成两次 本身只需要 1 3 秒 SELECT T1 time T1 Total T1 rn
  • 在 SQL Management Studio 2012 中调试

    我正在使用 Management Studio 2012 但无法调试任何 SQL 代码 在我点击 调试 按钮后 左侧没有看到任何绿色箭头 并且我的 SQL 对象都没有加载到内存中 当我将光标移到我设置的断点上时 我收到此消息 The bre
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj
  • 乐观并发:IsConcurrencyToken 和 RowVersion

    我正在创建将在我的应用程序中使用的默认并发策略 我决定采取乐观的策略 我的所有实体都映射为Table per Type TPT 使用继承 我很快了解到 在实体框架上使用带有继承的 RowVersion 类型的列时存在问题 Product I
  • T-SQL 平均值四舍五入到最接近的整数

    我不确定以前是否有人问过这个问题 但是如何在 T SQL 中将平均值四舍五入到最接近的整数 这应该可以做到 根据您要寻找的平均值 您可能需要在末尾使用 GROUP BY SELECT CONVERT int ROUND AVG Column
  • 从原始数据创建 n 个新行,例如 (1000....1000+n)

    我需要从 Excel 工作簿中读取数据 其中数据以这种方式存储 Company Accounts Company1 3000 3999 Company2 4000 4019 4021 4024 在 SSIS 中使用 OLE DB 目标的预期
  • 如何获取存储过程中的表列表?

    数据库中有很多表和sp 我找到特定 sp 存储过程 中使用的表名称 sp depends sp name 没有给出想要的结果 我也用过INFORMATION SCHEMA TABLES INFORMATION SCHEMA ROUTINES
  • 从 Excel 将参数传递到 SQL Server 上的 MS Query 中的临时变量

    我已经使用 Microsoft 查询创建了参数查询 如上所述here https superuser com questions 197453 run an sql query with a parameter from excel 200
  • 从一条记录中获取多条记录

    我有一个包含 2 列的表 名称为字符串 数量为整数 例如我需要每条记录的数量 X 数量字段 Name Qty Dave 25 Nathan 10 Chaim 8 我需要 Dave 提供的来自 nathan 10 和 chaim 8 的 25
  • SQL Union All 查询中的排序规则冲突

    有一个 Union All 查询 如下所示 当在 SQL Server 中触发时 出现错误 无法解决 SELECT 语句中第 1 列的排序规则冲突 请问 在哪里添加带有此 Union All 查询的 Collat e database de
  • 如何在 ssis 包 2016 中捕获毫秒时间戳

    如何在 ssis 包 2016 中捕获当前时间戳 我声明了一个变量并使用表达式 但缺少毫秒 currenttimestamp DT WSTR 50 DT DBTIMESTAMP System StartTime 我也想要毫秒 Thanks
  • LINQ-To-SQL 如何防止 SQL 注入?

    我目前正在使用 C 和 LINQ TO SQL 做一个项目 这个项目将安全性作为高优先级 所以显然我想防止 SQL 注入 我用谷歌搜索了此事 但 没有发现任何有用的信息 微软自己的常见问题解答告诉我 由于 LINQ 处理参数的方式 注入不会
  • DB2 vs PostgreSQL vs SQL Server [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人用过这三个数据库吗 你和他们有什么经历 PostgreSQL 对于一个项目来说看起来相当诱人 但我很想了解更多关于它的信息 我们是一家 NE
  • SQL Server 如何查看日期是否为当前月份?

    我有一个Ticket Date格式为的列YYYY MM DD HH MI SS 我想检查是否Ticket date是在当前月份 到目前为止我有 Ticket date gt 2015 04 01 and Ticket date lt 201
  • 将日期时间列拆分为年、月和周

    我想拆分日期时间列 以便年份和月份在 select 语句输出中都有自己的列 我还希望有一个按一年中的一周而不是特定日期的专栏 基本上 我希望单独的年 月和周列显示在我的 select 语句输出中 尝试使用DatePart http msdn
  • 找到帖子链接、每个标签对应的相关标签并在用户级别进行回答

    继续我之前的question https stackoverflow com questions 60967044 retrieve count of total no of answers corresponding to each ta
  • 确定自上次访问 SQL Server 以来的行更改

    我们有一个多用户系统 用户将数据保存到中央 SQL Server 2005 数据库中 我们遇到了一个问题 即一个用户刷新数据库中的更改 而另一个用户保存新数据 我们当前收集更改的方式是每个表上都有一个时间戳列 该列在每行插入 更新时都会填充
  • 参数的性能不如硬编码值

    我有一个执行得很糟糕的存储过程 当我声明一个变量时 设置它的值 然后在 where 子句中使用它 该语句需要一个多小时才能运行 当我对 where 子句中的变量进行硬编码时 它的运行时间不到一秒 我开始通过执行计划来查找问题所在 看起来当我

随机推荐

  • nmake 致命错误 U1034:语法错误:分隔符丢失

    gnsdk C wrapper sample makefile CC Csc exe CP cp GNSDK LIB PATH lib GNSDK PLATFORM GNSDK WRAPPER LIB PATH lib GNSDK PLAT
  • 如何使用 Alamofire 在多部分表单数据中追加数组?

    I am uploading image with multipart form data using Alamofire but getting some problem while i am passing an array as pa
  • Javascript,单击按钮时增加计数器

    在javascript中 我想制作一个计数器 当您单击按钮时该计数器会增加值 当我第一次单击添加按钮时 数字不会增加 但是当我将值打印到控制台时 结果会增加 小提琴 http jsfiddle net techydude H63As fun
  • 更好的(非线性)分箱

    我问的最后一个问题涉及如何通过 x 坐标对数据进行装箱 解决方案简单而优雅 我很遗憾我没有看到它 这个问题可能更难 或者我可能只是盲目的 我从大约 140000 个数据点开始 将它们分成 70 个沿 x 轴均匀分布的组 然后获取每组的平均位
  • 获取 Woocommerce 3 中的产品价格

    我正在尝试在我制作的函数中获取没有货币的价格 function add price widget global woocommerce product new WC Product get the ID thePrice product g
  • C++ - 将一个 ostream 中的数据发送到另一个 ostream

    我不明白这个 ostream 函数声明的含义 ostream operator lt lt ostream pf ostream 具体来说 pf ostream 部分 我想做类似的事情 void print ostream os cout
  • 在 emblem.js 中连接字符串与变量

    我需要在 Emblem js 中将带有变量值的字符串常量传输到 i18n 助手 我该怎么做 each item in model items div t dict item 返回错误 Missing translation for key
  • 使用 Glassfish 进行 UrlRewriteFilter

    如何将 URL 重写集成到我的 Glassfish v3 服务器中 我想知道这一点的原因是我正在使用 Quercus 将 PHP 应用程序部署到我的 Glassfish 服务器中 但 Quercus 依赖于mod rewriteApache
  • 如何检查测试延迟后反应组件显示的内容

    我想知道如何使用 React 测试库和 Jest 测试间隔相关计时器在几次滴答后显示的内容 假设我们有这样的代码 import React Component from react let timer class Test extends
  • java.sql.Date 不打印正确的日期

    以下代码打印出 3920 06 02 但它应该是 2020 05 02 我做错了什么 import java sql Date public static void main String args Date May0220 new Dat
  • 无法打包 Grails 3 应用程序 - NoSuchMethodError

    我正在尝试打包我的 Grails 3 1 5 应用程序 Running grails package or grails war 结果如下 FAILURE Build failed with an exception What went w
  • 无法绑定到“formGroup”,因为它不是“form”的已知属性

    情况 我试图在我的 Angular 应用程序中制作一个非常简单的表单 但无论如何 它都不起作用 角度版本 角度 2 0 0 RC5 错误 无法绑定到 formGroup 因为它不是 form 的已知属性 The code The view
  • 访问说明符和虚函数

    当虚拟函数在 C 指定的 3 种不同的访问说明符 public private protected 下声明时 可访问性规则是什么 每一个的意义是什么 任何解释该概念的简单代码示例都将非常有用 访问说明符的应用方式与在名称查找期间应用于任何其
  • 如何使用 python 查看是否有一个麦克风处于活动状态?

    我想使用 Python 查看麦克风是否处于活动状态 我该怎么做 提前致谢 麦克风是模拟设备 大多数 api 可能甚至无法告诉您是否插入了麦克风 您的计算机只是从声卡输入通道之一读取数据 您可能想知道输入通道是否打开或关闭 确定这一点是高度特
  • 如何在浏览器中运行 prettier 来格式化代码?例如ReactJs 应用程序内部

    我的 ReactJS 应用程序中有代码编辑器 CodeMirror v6 并且希望使用 Prettier 格式化代码后期编辑 如何在浏览器中运行得更漂亮 寻找类似的东西 prettier format code 这是经过一些测试并失败后发现
  • 使用 Powershell 和 Diskpart 扩展卷的可用空间

    我们所有服务器的磁盘分配都在增加 我不想输入 Select disk 6 Select Partition 1 Extend Select disk 7 Select Partition 1 Extend 每台服务器 10 卷 100 台服
  • 尝试 router.navigate 时 this.router 未定义

    我不明白为什么在尝试命令式导航时路由器未定义 如果我在 url 上写入 localhost 4200 alunos 1 edit 它工作正常 当我调用 editarContato 方法导航到学生详细信息页面时发生错误 这是我的详细信息类 g
  • Windows 11上Pyqt5-tools安装错误

    我下载Pyqt5的时候就下载了 但是当我尝试下载 Pyqt5 Tools 时 出现错误 我使用的是 Windows 11 使用Windows 10时 很容易下载 但安装后Windows 11并未安装 pip install pyqt5 to
  • 寻找生长曲线的最大梯度

    我使用 ggplot2 制作了一个包含四个增长曲线的图表 如果有人想尝试的话 希望下面的代码能够生成图表 我想找到每条线上的最大斜率值 例如 4 个时间点 任何人都可以给出如何解决这个问题的任何想法吗 library ggplot2 dat
  • 我想在 SQL Server 中执行 group_concat

    I know group concat在 SQL Server 2008 中不起作用 但我想做group concat 我的样本数据如下所示 email address product code email protected A123A