我想在 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 的相关文章

  • 在ASP CLASSIC中使用SQL参数,对象定义不正确错误

    我试图使用参数保护我的 INSERT 语句免受 SQL 注入 但由于某种原因我收到错误 Parameter object is improperly defined Inconsistent or incomplete informatio
  • 在 SQLCMD 模式下格式化输出?

    有没有办法可以指定输出文件格式SQLCMD模式这样我就可以使用它读回来BULK INSERT 我想做这样的事情 CONNECT SERVER1 OUT E test SELECT TOP 100 ID NAME FROM DB1 dbo T
  • 在 T-SQL 中解析 JSON 数组

    在我们的 SQL Server 表中 我们有一个存储有字符串数组的 json 对象 我想以编程方式将该字符串拆分为几列 但是 我似乎无法让它发挥作用 或者即使有可能 是否可以在WITH子句中创建多个列 或者在select语句中创建多个列是更
  • Docker连接SQL Server容器非零代码:1

    我正在尝试从创建一个 SQL Server 容器docker compose yml但是当我运行它时 它直接停止并出现一些错误 注意 它运行在带有 docker Preview 的 Apple M1 芯片上 docker compose y
  • Visual Studio SSDT Data Compare如何比较单个数据库中的两个表

    尝试在 SSDT 中做一些简单的数据比较 但事实证明有点困难 在一个数据库中 我有两个要比较的表 这些表具有相同的架构 只是表名不同 我只是想看看这个工具是否能给我一个很好的方法来比较两者的数据 I e tblOutput tblOutpu
  • 使用 Python 中的 SQL Server 存储过程 (pyodbc)

    我有一个存储过程 代码 DECLARE RC int DECLARE id varchar 13 DECLARE pw varchar 13 DECLARE depart varchar 32 DECLARE class varchar 1
  • 设置 xact_abort 并尝试一起捕获

    我的 sp 中有一个 try catch 块 其中只有一条插入语句 catch 检查错误代码是否违反 pk 如果是则进行更新 但有时我得到 当前事务无法提交 并且无法支持写入日志文件的操作 回滚事务 在批处理结束时检测到不可提交的事务 事务
  • 如何在 SELECT 子句中编写带点(“.”)的列名?

    我正在尝试使用 编写列名称 没有成功 sample SELECT PrmTable Value MAX Value FROM TempTable or SELECT MAX Value AS PrmTable Value FROM Temp
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • 如何让 LinqToSql 将“索引提示”传递给 sql server?

    由于我们不能相信我们的客户会更新 sql server 中的索引统计信息等 因此我们过去不得不使用索引提示 http www sql server performance com tips hints general p1 aspx 由于我
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • 在 SQL 2005+ 中,CLR 存储过程是否优于 TSQL 存储过程?

    我目前的观点是否定的 更喜欢 Transact SQL 存储过程 因为它们是重量更轻且 可能 性能更高的选项 而 CLR 过程允许开发人员进行各种恶作剧 然而最近我需要调试一些写得非常糟糕的 TSQL 存储过程 像往常一样 我发现许多问题是
  • C#的数组列表可以用来填充SSIS对象变量吗?

    我已在 C 脚本中填充了一个列表 并将其值分配给 SSIS 对象变量 然后 我使用该对象变量通过循环遍历 For every do 枚举器来执行一些 SQL 查询 我尝试通过 Foreach ado 枚举器执行此操作 但出现错误 X 变量不
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • 可以获取SQL Server中当前执行的存储过程的行号吗?

    几年前 我在 Sybase Delphi 环境中工作 使用 BDE 连接到数据库服务器 我们有一个 Delphi 小应用程序 给定当前正在执行的存储过程的名称 它可以告诉您当前正在执行该存储过程的哪一行 这对于调试似乎挂起的存储过程非常有用
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • VB6+SQL-Server:如何使用 ADODB.Command 执行带有命名参数的查询?

    我一直在尝试使用 ADODB Command 执行参数化查询 我知道我可以使用 对于参数 但我的查询相当大 我真的不想跟踪参数的确切顺序 我尝试了类似以下的操作 objCmd CommandType adCmdText objCmd Com

随机推荐

  • 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