2

对于这个话题,我有两个STUFF问题。

第一个问题是STUFFSQL Server 中的函数。第二个问题是关于STUFFOracle (8i) 中的功能。

问题 1:如何,从我想要填充的列中删除?

示例,给定表格:

ID      Country     Payment     Product
12345       USA     Cash        Red wine
12345       USA     Cash    
12345       USA     Cash

使用此脚本,它会产生:

select distinct Country, Payment,
stuff(isnull((select ', ' + x.Product from #temp x where x.ID = t.ID
group by x.Product for xml path ('')), ''), 1, 2, '') as Product


ID      Country     Payment     Product
12345   USA         Cash       , Red wine

如何删除结果以Red wine仅显示(删除逗号(,)?

请注意:我没有写这个STUFF函数。它是由一个叫 OMG Ponies 的人写的。

问题 2:与问题 1 相同,但语法在 Oracle 中:

select distinct ID, Country, Payment, WM_CONCAT(Product) AS Products
from
(
select distinct ID, Country, Payment, Product
from temp table
)x
group by ID, Country, Payment

我希望我的结果Red wine只显示(删除逗号(,)。

4

1 回答 1

3

问题 1: 就答案的 SQL Server 部分而言,您的 Product 字段中似乎有空字符串 - 如果没有空字符串,它们就不是空值。因此,您可以使用以下内容。我将该行添加and (product != '' and product is not null)到您的Stuff()部分,它将删除多余的逗号:

select distinct Country, Payment,
    stuff(isnull((select ', ' + x.Product 
                    from test x 
                    where x.ID = t.ID 
                      and (product != '' and product is not null)
                    group by x.Product for xml path ('')), ''), 1, 2, '') as Product
from test t

请参阅带有演示的 SQL Fiddle

问题 2:我无法访问 Oracle 8i 版本,但我猜如果您排除带有空字符串的值,逗号将消失。

于 2012-08-15T14:43:32.893 回答