标签: string-aggregation

postgres中LISTAGG的等价物是什么?

我必须用最新的postgres替换Oracle驱动程序.

Postgres不知道LISTAGG的功能.我必须用逗号分隔来连接值.

Postgres中Oracle函数LISTAGG的等价物是什么?

谢谢.

sql postgresql string-aggregation listagg

16
推荐指数
2
解决办法
3万
查看次数

STRING_AGG表现不尽如人意

我有以下查询:

WITH cteCountryLanguageMapping AS (
    SELECT * FROM (
        VALUES
            ('Spain', 'English'),
            ('Spain', 'Spanish'),
            ('Sweden', 'English'),
            ('Switzerland', 'English'),
            ('Switzerland', 'French'),
            ('Switzerland', 'German'),
            ('Switzerland', 'Italian')
    ) x ([Country], [Language])
)
SELECT
    [Country],
    CASE COUNT([Language])
        WHEN 1 THEN MAX([Language])
        WHEN 2 THEN STRING_AGG([Language], ' and ')
        ELSE STRING_AGG([Language], ', ')
    END AS [Languages],
    COUNT([Language]) AS [LanguageCount]
FROM cteCountryLanguageMapping
GROUP BY [Country]
Run Code Online (Sandbox Code Playgroud)

我期待瑞士的Languages栏中的值以逗号分隔,即:

  | Country     | Languages                                 | LanguageCount
--+-------------+-------------------------------------------+--------------
1 | Spain       | Spanish and English                       | 2
2 | Sweden      | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server string-aggregation sql-server-2017

15
推荐指数
1
解决办法
553
查看次数

sqlite中的字符串聚合

任何人都知道sqlite中的String Aggregation是否可行?如果我有一个5行/数据的动物专栏,我怎样才能将它们组合起来,以便输出在一个字段'dog','cat','rat','mice','mouse'作为动物

谢谢

sqlite string-aggregation

11
推荐指数
1
解决办法
2778
查看次数

CONCAT(专栏)OVER(PARTITION BY ...)?分组连接行而不对结果本身进行分组

我需要一种方法来在一种窗口函数中对所有行(每组)进行串联,就像你可以做的那样COUNT(*) OVER(PARTITION BY...),每个组的所有行的聚合计数将在每个特定的组中重复.我需要类似的东西,但是每个组中重复的每个组的所有值的字符串连接.

这是一些示例数据和我想要的结果,以更好地说明我的问题:

grp  |  val
------------
1    |  a
1    |  b
1    |  c
1    |  d
2    |  x
2    |  y
2    |  z
Run Code Online (Sandbox Code Playgroud)

这就是我需要的(期望的结果):

grp  |   val  |  groupcnct
---------------------------------
1    |   a    |  abcd
1    |   b    |  abcd
1    |   c    |  abcd
1    |   d    |  abcd
2    |   x    |  xyz
2    |   y    |  xyz
2    |   z    |  xyz
Run Code Online (Sandbox Code Playgroud)

以下是此问题的棘手部分:

我的特殊情况使我无法两次引用同一个表(我实际上是在递归CTE中执行此操作,因此我无法对CTE进行自联接,否则会引发错误).

我完全清楚可以做一些事情:

SELECT      a.*, b.groupcnct
FROM …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008 string-aggregation

10
推荐指数
1
解决办法
8365
查看次数

Oracle:将子查询中的多个结果合并为一个以逗号分隔的值

我正在尝试将单列VARCHAR圆形查询转换为命令分隔的值列表.

这与此问题完全相同,但对于Oracle而不是SQL Server或MySQL.

sql oracle subquery string-aggregation

9
推荐指数
2
解决办法
3万
查看次数

2017年前的sql server的string_agg

任何人都可以帮助我使这个查询适用于sql server 2014.这是在Postgresql和可能在sql server 2017上工作.在Oracle上它是listagg而不是string_agg.

这是sql:

select 
string_agg(t.id,',') AS id
from Tabel t
Run Code Online (Sandbox Code Playgroud)

我在网站上检查了一些xml选项应该使用但我无法理解.

sql sql-server string-aggregation

9
推荐指数
2
解决办法
4563
查看次数

在STRING_AGG中产生DISTINCT值

我在SQL Server 2017中使用STRING_AGG函数。我想创建与相同的效果COUNT(DISTINCT <column>)。我试过了,STRING_AGG(DISTINCT <column>,',')但这不是合法的语法。

我想知道是否有T-SQL解决方法。这是我的样本:

WITH Sitings 
  AS
  (
    SELECT * FROM (VALUES 
      (1, 'Florida', 'Orlando', 'bird'),
      (2, 'Florida', 'Orlando', 'dog'),
      (3, 'Arizona', 'Phoenix', 'bird'),
      (4, 'Arizona', 'Phoenix', 'dog'),
      (5, 'Arizona', 'Phoenix', 'bird'),
      (6, 'Arizona', 'Phoenix', 'bird'),
      (7, 'Arizona', 'Phoenix', 'bird'),
      (8, 'Arizona', 'Flagstaff', 'dog')
    ) F (ID, State, City, Siting)
  ) 
SELECT State, City, COUNT(DISTINCT Siting) [# Of Types], STRING_AGG(Siting,',') Animals
FROM Sitings 
GROUP BY State, City
Run Code Online (Sandbox Code Playgroud)

上面产生了以下结果:

+---------+-----------+--------------+-------------------------+
|  State  |   City    | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server distinct string-aggregation sql-server-2017

9
推荐指数
4
解决办法
7455
查看次数

在SQL Server中使用STRING_AGG获取唯一值

以下查询返回如下所示的结果:

SELECT 
    ProjectID, newID.value
FROM 
    [dbo].[Data] WITH(NOLOCK)  
CROSS APPLY 
    STRING_SPLIT([bID],';') AS newID  
WHERE 
    newID.value IN ('O95833', 'Q96NY7-2') 
Run Code Online (Sandbox Code Playgroud)

结果:

ProjectID   value
---------------------
2           Q96NY7-2
2           O95833
2           O95833
2           Q96NY7-2
2           O95833
2           Q96NY7-2
4           Q96NY7-2
4           Q96NY7-2
Run Code Online (Sandbox Code Playgroud)

使用STRING_AGG以下查询中显示的新添加的功能(在SQL Server 2017中),我可以获取以下结果集。

SELECT 
    ProjectID,
    STRING_AGG( newID.value, ',') WITHIN GROUP (ORDER BY newID.value) AS 
NewField
FROM
    [dbo].[Data] WITH(NOLOCK)  
CROSS APPLY 
    STRING_SPLIT([bID],';') AS newID  
WHERE 
    newID.value IN ('O95833', 'Q96NY7-2')  
GROUP BY 
    ProjectID
ORDER BY 
    ProjectID
Run Code Online (Sandbox Code Playgroud)

结果:

ProjectID   NewField
-------------------------------------------------------------
2           O95833,O95833,O95833,Q96NY7-2,Q96NY7-2,Q96NY7-2
4 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server string-aggregation sql-server-2017

7
推荐指数
4
解决办法
1万
查看次数

SQL Server 2016中的String_agg

这是我在SQL Server 2016中的代码

insert into @entdef_queries(entitydefid,squery)
            select A.entitydefid
                ,
                (
                    select String_agg(cols,ioperator)
                    from
                    (
                        Select case when lower(b.metricdatatype) like 'string%' or lower(b.metricdatatype) like '%char%' or lower(b.metricdatatype) ='bit' or lower(b.metricdatatype) like 'date%' then
                                ' lower("'+ b.metricname +'") ' + b.metriccondition +' '''+ b.value1 +''' ' 
                            when lower(b.metricdatatype) not like 'string%' and lower(b.metricdatatype) like '%char%' and lower(b.metricdatatype) !='bit' and lower(b.metricdatatype) not like 'date%' then 
                                case when lower(b.metriccondition)='between' then  ' "'+ b.metricname +'"' + b.metriccondition +' '+ b.value1 +' and ' + b.value2 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server string-aggregation sql-server-2016

6
推荐指数
1
解决办法
3643
查看次数

STRING_AGG 带换行符

DROP TABLE IF EXISTS items;
CREATE TABLE items (item varchar(20));
INSERT INTO items VALUES ('apple'),('raspberry');
SELECT STRING_AGG(item, CHAR(13)) AS item_list FROM items;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如何在项目之间换行?

sql t-sql sql-server string-aggregation

6
推荐指数
1
解决办法
4363
查看次数