1

次の行があるとします。

行 1apple,watermelon,pineapple

行 2apple,pineapple,orange

行 3apple,blue berry

すべての行から一意の値を取得する単一のテキスト値を作成したいと考えています。

クエリでどのように行うのですか?

期待される結果:

apple,watermelon,pineapple,orange,blue berry

4

3 に答える 3

2

これを試して:

select array_agg(val) from (
  select distinct unnest(string_to_array(my_column, ',')) val from my_table) x

何が起こっているかの内訳:

  • string_to_array()指定された区切り文字を使用して、文字列を真の配列に分割します
  • unnest()配列を個別の行に変換します - 要素ごとに 1 つ
  • distinct重複行を削除します
  • array_agg()すべての行を 1 つの CSV 文字列に結合します (通常はgroup by句を使用しますが、グループは 1 つしかないため、ここでは必要ありません)
于 2013-05-15T03:28:06.590 に答える
0

次の関数を使用して、行の値を ' ,'で分割できます

CREATE FUNCTION [dbo].[ConvertToTable]
    (
      @delimiter char(1),
      @string nvarchar(MAX)
    )
RETURNS @Values TABLE ( VALUE NVARCHAR(MAX) )
AS BEGIN
    SET @string = @string + @delimiter ;

    WITH    Nbrs_3 ( n ) AS ( SELECT   1 UNION SELECT   0 ) ,
            Nbrs_2 ( n ) AS ( SELECT   1 FROM     Nbrs_3 n1 CROSS JOIN Nbrs_3 n2 ) ,
            Nbrs_1 ( n ) AS ( SELECT   1 FROM     Nbrs_2 n1 CROSS JOIN Nbrs_2 n2 ) ,
            Nbrs_0 ( n ) AS ( SELECT   1 FROM     Nbrs_1 n1 CROSS JOIN Nbrs_1 n2 ) ,
            Nbrs ( n ) AS ( SELECT   1 FROM     Nbrs_0 n1 CROSS JOIN Nbrs_0 n2 )
       INSERT @Values ( [VALUE] )
        SELECT  SUBSTRING(@string, n + 1, CHARINDEX(@delimiter, @string, n + 1) - n - 1)
        FROM    ( SELECT    0 AS 'n' UNION ALL
                  SELECT TOP ( LEN(@string) - 1 ) ROW_NUMBER() OVER ( ORDER BY n ) AS 'n' FROM      Nbrs
                ) x
        WHERE   SUBSTRING(@string, n, 1) = @delimiter
                OR n = 0

    RETURN 
   END

そして、次のコードを使用して結果を取得します..

DECLARE @unique_value NVARCHAR(MAX)

WITH cte AS (
SELECT 1 AS id, 'apple,watermelon,pineaple' AS String
UNION
SELECT 2 ,'apple,pineaple,orange'
UNION
SELECT 3 ,'apple,blue berry'

)

SELECT @unique_value= COALESCE(@unique_value+',','')+[VALUE] FROM [cte]
CROSS APPLY [dbo].[ConvertToTable](',',[String]) AS CTT
GROUP BY [VALUE]

SELECT @unique_value

更新:これがpostgresqlに関するものだとは気づきませんでした。postgresqlで同じことができれば、MSSQLの答えを出しました。この方法はあなたを助けるでしょう..

于 2013-05-15T02:55:47.600 に答える