3

このクエリを考えると:

select distinct subject_key
from mytable

結果:

subject_key
-----------
90896959
90895823
90690171
90669265
90671321

Oracle でクエリを作成する方法 (Aqua Data Studio バックエンド Oracle 8i を使用) 結果:

subject_key
-----------
90896959,
90895823,
90690171,
90669265,
90671321

皆さんありがとう!以下のように、出力を下ではなく横に変更したいですか。どのように書きますか、同じプラットフォームです。ありがとう。

subject_key
90896959,  90895823, 90690171,  90669265, 90671321
4

2 に答える 2

6

Oracle には、MySQL の GROUP_CONCAT のような機能がありません。これはまさにあなたが求めている機能です。 このページでは、このような文字列集計のさまざまなオプションが提供されています。その 1 つは、カスタム関数を使用することです。

CREATE OR REPLACE FUNCTION get_subjectkey (IN_PK IN MYTABLE.PRIMARY_KEY%TYPE)
RETURN VARCHAR2
IS
  l_text  VARCHAR2(32767) := NULL;
BEGIN

  FOR cur_rec IN (SELECT subject_key 
                    FROM MYTABLE 
                   WHERE primary_key = IN_PK) LOOP
    l_text := l_text || ',' || cur_rec.ename;
  END LOOP;

  RETURN LTRIM(l_text, ',');
END;

次に、次のように使用します。

SELECT get_subjectkey(?) AS subject_key
  FROM DUAL

...「?」を置き換えます 主キーの値で。

以前

列値の末尾にコンマを追加したいだけだと仮定すると、次を使用します。

SELECT DISTINCT TO_CHAR(subject_key) || ','
  FROM MYTABLE

二重パイプ -- "||" -- SQL で文字列を連結する Oracle [、PostgreSQL、現在は ANSI] の手段です。TO_CHAR を使用してデータ型を明示的に変換しましたが、次を使用できます。

SELECT DISTINCT subject_key || ','
  FROM MYTABLE

...それが必要ない場合。

于 2010-11-11T17:35:36.683 に答える
-2

おそらく: SELECT subject_key + ',' AS subject_key FROM mytable

少なくとも、T-SQL ではそうです。PL-SQL は若干異なる場合があります。

于 2010-11-11T17:35:42.397 に答える