oracle Oracle中如何使用stuff函数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13421902/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 01:15:42  来源:igfitidea点击:

how to use stuff function in Oracle

oracle

提问by joe

Happy Holidays!

节日快乐!

I asked the stuff function in Oralce question several months ago and would like to revisit this question. The problem was when using the WM_CONCAT function (in Oracle), the result included the (,) in the front or before the field I wanted to stuff. I googled to find a solution for this but had no success so far. What should I need to include in the WM_CONCAT function in order to remove the extra empty string for the field i'd like to stuff? Could someone please look into?

几个月前我在 Oralce 问题中询问了 stuff 函数,并想重新审视这个问题。问题是在使用 WM_CONCAT 函数(在 Oracle 中)时,结果在我想要填充的字段的前面或前面包含了 (,)。我用谷歌搜索找到了解决方案,但到目前为止没有成功。我应该在 WM_CONCAT 函数中包含什么才能删除我想要填充的字段的额外空字符串?有人可以看看吗?

Thanks, Joe

谢谢,乔

I have some sample records below

我在下面有一些示例记录

CREATE TABLE #TEMP
(
  COMPANY VARCHAR (50),
  ID INT,
  PRODUCT VARCHAR(50)
)

INSERT INTO #TEMP VALUES ('APPLES', '123', 'IPHONE4')
INSERT INTO #TEMP VALUES ('APPLES', '123', 'IPHONE4S')
INSERT INTO #TEMP VALUES ('APPLES', '123', 'IPHONE5')


INSERT INTO #TEMP VALUES ('SAMSUNG', '124', 'GALAXY S2')
INSERT INTO #TEMP VALUES ('SAMSUNG', '124', 'GALAXY S3')
INSERT INTO #TEMP VALUES ('SAMSUNG', '124', 'GALAXY S4')


INSERT INTO #TEMP VALUES ('NOKIA', '125', 'C5-02')
INSERT INTO #TEMP VALUES ('NOKIA', '125', 'C5-03')
INSERT INTO #TEMP VALUES ('NOKIA', '125', 'C5-04')

When running this query it produces as

运行此查询时,它生成为

SELECT
COMPANY,
ID,
WM_CONCAT(PRODUCT) AS PRODUCT, --STUFF PRODUCT COLUMN
FROM
(
   SELECT
   COMPANY,
   ID,
   PRODUCT
   FROM #TEMP
 )
GROUP BY COMPANY, ID


COMPANY     ID      PRODUCT
APPLES      123     IPHONE4, IPHONE4S, IPHONE5
SAMSUNG     124     ,GALAXY S2, GALAXY S3, GALAXY S4
NOKIA       125     ,C5-02, C5-03, C5-04

回答by Gerrat

Just replace the:

只需更换:

WM_CONCAT(PRODUCT)

with:

和:

LTRIM(WM_CONCAT(PRODUCT),',')

This will remove any leading comma's from your column.

这将从您的列中删除任何前导逗号。

回答by J?cob

Try with the following query

尝试使用以下查询

SELECT
COMPANY,
ID,
WM_CONCAT(PRODUCT) AS PRODUCT
FROM
(
   SELECT
   COMPANY,
   ID,
   PRODUCT
   FROM TEMP
 )
GROUP BY COMPANY, ID

Is this the output you are looking for?

这是您正在寻找的输出吗?

NOKIA   125 C5-02,C5-04,C5-03
APPLES  123 IPHONE4,IPHONE5,IPHONE4S
SAMSUNG 124 GALAXY S2,GALAXY S4,GALAXY S3

Query can be this way as well

查询也可以这样

SELECT
COMPANY,
ID,
WM_CONCAT(PRODUCT) AS PRODUCT
FROM TEMP
--(
--   SELECT
--   COMPANY,
--   ID,
--   PRODUCT
--   FROM TEMP
-- )
GROUP BY COMPANY, ID