0

数か月前にOralceの質問でスタッフ機能について質問しましたが、この質問をもう一度確認したいと思います。問題は、(Oracleの)WM_CONCAT関数を使用したときに、結果の前または詰め込みたいフィールドの前に(、)が含まれていたことです。

私はこれに対する解決策を見つけるためにグーグルで検索しましたが、これまでのところ成功していません。詰め込みたいフィールドの余分な空の文字列を削除するには、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 に答える