我使用的是Oracle 10g并具有以下表结构:id,paragraph
我想按ID分组并连接段落.每个段落可能有1500个字符或更多.
当我尝试wm_concat函数时,它会抱怨字符串缓冲区太小.我实际上在Oracle的网站上尝试过很多例子,但是它们都会因字符串缓冲区太小而失败.
select id, wm_concat(paragraph) from paragraphs group by id
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
有人可以告诉我如何实现以下目标吗?
表:
efforts_id cycle_name release_name
123 quarter march
123 half april
123 full april
124 quarter may
Run Code Online (Sandbox Code Playgroud)
我的预期产量:
efforts_id cycle_name release_name
123 quarter,half,full march,april
124 quarter may
Run Code Online (Sandbox Code Playgroud)
我是oracle的初学者所以不确定如何做到这一点.任何帮助,将不胜感激.
谢谢
我正在将一些SQL Server 2008R2查询迁移到Postgresql 9.0,我遇到了一些问题.这是SQL Server查询:
stuff((select ', '+p.[NAME] as 'data()'
from BPROVIDERS_PROVIDER p, BORDER_ARTICLEORDERPROVIDER aop
where p.OID = aop.PROVIDER for xml path('')),1,1,'')) as pNAMES
Run Code Online (Sandbox Code Playgroud)
阅读SQL Server文档我明白这会创建一个以逗号分隔的列表.我认为我可以在Postresql中更改stuff功能overlay.我对么?
第二个问题是SQL Server的for xml path('')作为参数.它返回分配给名为pNAMES而不是create row元素的属性的值.那是对的吗?
Query_to_xml()带属性的Postgresql 函数是否tableforest = 'true'也一样?
谢谢.
在 Postgres 中,我尝试在服务器数据的结果行中包含到特定服务器的链接 IP 地址的逗号分隔列表。
最初我使用了 FILTER 功能,这似乎非常适合我的目的
STRING_AGG(ipadd, ',') FILTER ( WHERE ipadd is NULL OR ipadd != '') AS ipaddresses
Run Code Online (Sandbox Code Playgroud)
产生结果行,例如
server1;data;etc; 1.2.3.4;
server2;data;etc; 11.22.33.44, 22.33.44.55;
server3;data;etc;
server3;data;etc; 23.45.67.89
Run Code Online (Sandbox Code Playgroud)
然而,据了解,它将运行的服务器使用较低版本的 postgresql,它不支持 FILTER 功能。
因此我需要简化对
STRING_AGG(ipadd, ',') AS ipaddresses
Run Code Online (Sandbox Code Playgroud)
由于从第二个表返回的多行中存在可能为空或 null 的条目,因此返回如下内容:
server1;data;etc; ,1.2.3.4,,,;
server2;data;etc; 11.22.33.44,,, 22.33.44.55,,,;
server3;data;etc; ,,,,,,,,,
server3;data;etc; ,,23.45.67.89,,
Run Code Online (Sandbox Code Playgroud)
每个空或空条目都会生成另一个空字段,该字段包含在正确的数据中。
是否有一种预过滤方法可以实现与上面的过滤查询相同的结果,或者甚至只是删除所有不分隔两个返回数据的逗号实例。
目前,我只是在调用后在服务器端解析这些内容,但如果可能的话,我更愿意在 SQL 端进行解析。
我尝试创建一个通用函数,可以像在 SQL Server 2017 上使用新的 string_agg 内置函数的示例一样使用
内部实现可以类似于以下内容
with tbl as(
select a.Id, c.Desc
from TableA a
join TableB b on b.aId = a.Id
join TableC c on c.Code = b.bCode
)
select distinct ID
, STUFF(( select ', ' + Desc from tbl t where t.ID = tbl.ID
for xml path(''),TYPE).value('.','VARCHAR(MAX)'),1,2,'') Desc
from tbl
Run Code Online (Sandbox Code Playgroud)
但是如何接收字段键、要连接的字段、分隔符和范围选择上下文呢?Inline与或Multi-Statement Table-Valued Functions相关吗?
我的查询如下:
select
u.Id,
STRING_AGG(sf.Naziv, ', ') as 'Ustrojstvena jedinica',
ISNULL(CONVERT(varchar(200), (STRING_AGG(TRIM(p.Naziv), ', ')), 121), '')
as 'Partner',
from Ugovor as u
left join VezaUgovorPartner as vup
on vup.UgovorId = u.Id AND vup.IsDeleted = 'false'
left join [TEST_MaticniPodaci2].dbo.Partner as p
on p.PartnerID = vup.PartnerId
left join [dbo].[VezaUgovorUstrojstvenaJedinica] as vuu
on vuu.UgovorId = u.Id
left join [TEST_MaticniPodaci2].hcphs.SifZavod as sf
on sf.Id = vuu.UstrojstvenaJedinicaId
left join [dbo].[SifVrstaUgovora] as vu
on u.VrstaUgovoraId = vu.Id
group by u.Id, sf.Naziv
Run Code Online (Sandbox Code Playgroud)
我的问题是我可以有更多的 sf.Naziv,也只有一个 sf.Naziv,所以我必须检查是否有一个,然后只显示一个结果,如果有两个或更多,则显示更多的结果。但现在的问题是,当我只有一个 sf.Naziv 时,查询返回两个同名的 sf.Naziv,因为在第一个 …
我想聚合单列值,中间有分隔符并带有一些前缀。下面是尝试过的有效代码。
SELECT concat('TNB/IAG/',STRING_AGG(WF_ValStr, '/')) AS Result
FROM wfattrdata where wf_id=35262472 and WF_AttrID in (28,29,30,31,33);
Run Code Online (Sandbox Code Playgroud)
我可以在最新的 MSSql 版本中得到以下预期结果。
TNB/IAG/1/2/3/4/5
Run Code Online (Sandbox Code Playgroud)
如何替换上述查询以使其在 SQL Server 2016 中工作?
我有这个问题:
(SELECT OBJECT_ID from cr_object_group_entries_vw where object_group_id IN
(SELECT ITEM FROM TABLE(CR_FN_SPLIT_STRING('28,56',','))))
Run Code Online (Sandbox Code Playgroud)
返回:

但当我这样做时:
SELECT wm_concat(object_id) FROM
(SELECT OBJECT_ID from cr_object_group_entries_vw where object_group_id IN
(SELECT ITEM FROM TABLE(CR_FN_SPLIT_STRING('28,56',','))))
Run Code Online (Sandbox Code Playgroud)
我得到一个空白的结果......我做错了什么?
这是一个示例表数据
Fruit Number
Apple 1
Apple 2
Apple 3
Kiwi 6
Kiwi 10
Run Code Online (Sandbox Code Playgroud)
我尝试连接表列值以获得以下内容
Fruit Number
Apple 1-2-3
Kiwi 6-10
Run Code Online (Sandbox Code Playgroud)
有没有办法查询这个或存储过程?像Concatenate over(partition by)之类的东西,我对存储过程知之甚少.谢谢!
我通过 pgAdmin 4 使用具有只读访问权限的 Postgres 9.5,并且尝试编写一个选择查询来转换来自此表单的数据:
+----------+-------------------+--------------------+----------------+
| username | filters | groups | roles |
+----------+-------------------+--------------------+----------------+
| kd24 | Khaled <27607> | V1 | NewsStand User |
| kd24 | Khaled <27607> | V1 | User |
| kd24 | Khaled <27607> | Weekly KPIs | NewsStand User |
| kd24 | Khaled <27607> | Detailed Sales | User |
| kd24 | Khaled <27607> | Qanz Monthly Group | User |
| kd24 | Khaled <27607> | Detailed …Run Code Online (Sandbox Code Playgroud)