标签: string-aggregation

在Microsoft SQL Server 2005中模拟group_concat MySQL函数?

我正在尝试将基于MySQL的应用程序迁移到Microsoft SQL Server 2005(不是选择,而是生活).

在原始应用程序中,我们几乎完全使用符合ANSI-SQL的语句,但有一个重要的例外 - 我们group_concat经常使用MySQL的函数.

group_concat顺便说一下,这样做:给出一张表,比如说,员工姓名和项目......

SELECT empName, projID FROM project_members;
Run Code Online (Sandbox Code Playgroud)

收益:

ANDY   |  A100
ANDY   |  B391
ANDY   |  X010
TOM    |  A100
TOM    |  A510
Run Code Online (Sandbox Code Playgroud)

...这是你用group_concat得到的:

SELECT 
    empName, group_concat(projID SEPARATOR ' / ') 
FROM 
    project_members 
GROUP BY 
    empName;
Run Code Online (Sandbox Code Playgroud)

收益:

ANDY   |  A100 / B391 / X010
TOM    |  A100 / A510
Run Code Online (Sandbox Code Playgroud)

所以我想知道的是:是否有可能在SQL Server中编写用户定义的函数来模拟其功能group_concat

我几乎没有使用UDF,存储过程或类似的东西的经验,只是直接的SQL,所以请错误地说太多的解释:)

sql sql-server sql-server-2005 string-aggregation

342
推荐指数
9
解决办法
17万
查看次数

如何通过'查询连接PostgreSQL'组中的字符串字段的字符串?

我正在寻找一种通过查询连接组内字段的字符串的方法.例如,我有一张桌子:

ID   COMPANY_ID   EMPLOYEE
1    1            Anna
2    1            Bill
3    2            Carol
4    2            Dave
Run Code Online (Sandbox Code Playgroud)

我想通过company_id分组得到类似的东西:

COMPANY_ID   EMPLOYEE
1            Anna, Bill
2            Carol, Dave
Run Code Online (Sandbox Code Playgroud)

mySQL中有一个内置函数来执行这个group_concat

sql postgresql group-by string-aggregation

329
推荐指数
9
解决办法
30万
查看次数

Postgresql GROUP_CONCAT等价?

我有一个表,我想每个id拉一行,并且字段值连接在一起.

例如,在我的表中,我有这个:

TM67 | 4  | 32556
TM67 | 9  | 98200
TM67 | 72 | 22300
TM99 | 2  | 23009
TM99 | 3  | 11200
Run Code Online (Sandbox Code Playgroud)

我想输出:

TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3    | 23009,11200
Run Code Online (Sandbox Code Playgroud)

在MySQL中,我能够使用聚合函数GROUP_CONCAT,但这似乎在这里不起作用...是否有等效的PostgreSQL,或其他方法来实现这一点?

sql postgresql group-concat string-aggregation

237
推荐指数
5
解决办法
14万
查看次数

SQL Query用于连接Oracle中多行的列值

是否可以构造SQL来连接多行的列值?

以下是一个例子:

表A.

PID
A
B
C

表B.

PID   SEQ    Desc

A     1      Have
A     2      a nice
A     3      day.
B     1      Nice Work.
C     1      Yes
C     2      we can 
C     3      do 
C     4      this work!

SQL的输出应该是 -

PID   Desc
A     Have a nice day.
B     Nice Work.
C     Yes we can do this work!

所以输出表的Desc列基本上是表B的SEQ值的串联?

有没有SQL的帮助?

sql oracle string-aggregation

149
推荐指数
7
解决办法
34万
查看次数

如何在sql server中使用group_concat进行查询

我知道在sql server中我们不能使用Group_concat函数但是这里有一个问题,我需要Group_Concat我的查询.我谷歌它发现了一些逻辑,但无法纠正它.我的SQL查询是

select  m.maskid,m.maskname,m.schoolid,s.schoolname,
md.maskdetail
from tblmask m join school s on s.id = m.schoolid 
join maskdetails md on m.maskid = md.maskid
order by m.maskname ;
Run Code Online (Sandbox Code Playgroud)

它给我的结果如

在此输入图像描述

只看前三行在那个maskid,maskname,schoolid,schoolname是相同的但是maskdetail是不同的,所以想要一行,其中最后一列可以包含所有maskdetails,如maskid等等.

我希望我的输出像

在此输入图像描述

等等.请在查询时帮助我.

提前致谢.

sql-server string-aggregation sql-server-group-concat

104
推荐指数
4
解决办法
18万
查看次数

如何将多行组合到Oracle中以逗号分隔的列表中?

我有一个简单的查询:

select * from countries
Run Code Online (Sandbox Code Playgroud)

结果如下:

country_name
------------
Albania
Andorra
Antigua
.....
Run Code Online (Sandbox Code Playgroud)

我想在一行中返回结果,所以像这样:

Albania, Andorra, Antigua, ...
Run Code Online (Sandbox Code Playgroud)

当然,我可以编写一个PL/SQL函数来完成这项工作(我已经在Oracle 10g中完成了),但是对于这个任务是否有更好的,最好是非特定于Oracle的解决方案(或者可能是内置函数) ?

我通常会用它来避免子查询中的多行,所以如果一个人有一个以上的公民身份,我不希望她/他在列表中是重复的.

我的问题是基于SQL Server 2005上的类似问题.

更新:我的功能如下:

CREATE OR REPLACE FUNCTION APPEND_FIELD (sqlstr in varchar2, sep in varchar2 ) return varchar2 is
ret varchar2(4000) := '';
TYPE cur_typ IS REF CURSOR;
rec cur_typ;
field varchar2(4000);
begin
     OPEN rec FOR sqlstr;
     LOOP
         FETCH rec INTO field;
         EXIT WHEN rec%NOTFOUND;
         ret := ret || field || sep;
     END LOOP;
     if length(ret) …
Run Code Online (Sandbox Code Playgroud)

sql oracle pivot concatenation string-aggregation

101
推荐指数
5
解决办法
38万
查看次数

如何从string_agg()中对结果进行排序

我有一张桌子:

CREATE TABLE tblproducts
(
productid integer,
product character varying(20)
)
Run Code Online (Sandbox Code Playgroud)

随着行:

INSERT INTO tblproducts(productid, product) VALUES (1, 'CANDID POWDER 50 GM');
INSERT INTO tblproducts(productid, product) VALUES (2, 'SINAREST P SYP 100 ML');
INSERT INTO tblproducts(productid, product) VALUES (3, 'ESOZ D 20 MG CAP');
INSERT INTO tblproducts(productid, product) VALUES (4, 'HHDERM CREAM 10 GM');
INSERT INTO tblproducts(productid, product) VALUES (5, 'CREAM 15 GM');
INSERT INTO tblproducts(productid, product) VALUES (6, 'KZ LOTION 50 ML');
INSERT INTO tblproducts(productid, product) VALUES (7, 'BUDECORT …
Run Code Online (Sandbox Code Playgroud)

sql postgresql string-aggregation

77
推荐指数
2
解决办法
7万
查看次数

如何在不创建存储过程的情况下将多行连接成Oracle中的一行?

如何在不创建存储过程的情况下在oracle中实现以下功能?

数据集:

question_id    element_id
1              7
1              8
2              9
3              10
3              11
3              12
Run Code Online (Sandbox Code Playgroud)

期望的结果:

question_id    element_id
1              7,8
2              9
3              10,11,12
Run Code Online (Sandbox Code Playgroud)

sql oracle concatenation string-aggregation

55
推荐指数
3
解决办法
23万
查看次数

如何使用SQL查询创建逗号分隔列表?

我有3个表叫:

  • 应用程序(id,name)
  • 资源(id,name)
  • ApplicationsResources(id,app_id,resource_id)

我想在GUI上显示所有资源名称的表.在每行的一个单元格中,我想列出该资源的所有应用程序(以逗号分隔).

所以问题是,在SQL中执行此操作的最佳方法是什么,因为我需要获取所有资源,而且还需要获取每个资源的所有应用程序?

我是否首先从资源运行select*然后遍历每个资源并对每个资源执行单独的查询以获取该资源的应用程序列表?

有没有办法在一个查询中执行此操作?

sql t-sql sql-server string-aggregation

53
推荐指数
6
解决办法
15万
查看次数

STRING_AGG聚合结果超出8000字节错误限制

我需要按组组合文本。我发现了一个名为 的函数STRING_AGG

select c.id
, c.bereichsname
, STRING_AGG(j.oberbereich,',') oberBereiches 
from stellenangebote_archiv as j
join bereiche as c on j.bereich_id = c.id
group by c.id, c.bereichsname
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

STRING_AGG 聚合结果超出了 8000 字节的限制。使用 LOB 类型以避免结果截断。

sql sql-server string aggregate string-aggregation

36
推荐指数
2
解决办法
6万
查看次数