0

几个月前我问了 Oralce 中的 stuff 函数问题,并想重新讨论这个问题。问题是在使用 WM_CONCAT 函数(在 Oracle 中)时,结果在我想要填充的字段的前面或前面包含 (,)。

我用谷歌搜索找到解决方案,但到目前为止没有成功。为了删除我想要填充的字段的额外空字符串,我应该在 WM_CONCAT 函数中包含什么?

我在下面有一些示例记录

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')

运行此查询时,它生成为

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
4

2 回答 2

3

只需更换:

WM_CONCAT(PRODUCT)

和:

LTRIM(WM_CONCAT(PRODUCT),',')

这将从您的列中删除所有前导逗号。

于 2012-11-16T20:02:19.010 回答
0

尝试使用以下查询

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

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

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

查询也可以这样

SELECT
COMPANY,
ID,
WM_CONCAT(PRODUCT) AS PRODUCT
FROM TEMP
--(
--   SELECT
--   COMPANY,
--   ID,
--   PRODUCT
--   FROM TEMP
-- )
GROUP BY COMPANY, ID
于 2012-11-16T18:04:04.040 回答