0

Report Builder 2.0で、次のようなデータを含むテーブルを作成しようとしています。

Person | StrID's
-------------------
Jim    | a, b, c, d
Mary   | h, k
Sue    | l, m, p, z

問題は、OracleSQLクエリが次の形式でデータを返すことです。

Person | StrID
--------------
Jim    | a
Jim    | b
Jim    | c
Jim    | d
Mary   | h

等々。このチュートリアルLISTAGGで説明されているように、Oracleで使用するアクセス権がありません。また、非常に限られたインターフェイスを介してデータベースにアクセスする必要があるため、使用しているOracleのバージョンを使用または通知することもできません。レポートビルダーの関数を調べましたが、集計関数を使用して複数の文字列値を連結する方法が見つかりません。Personごとにグループ化されたテーブルを作成すると、StrIDごとに個別の行が取得されます。を使用すると、「#Error」がテーブルセルに表示されます。これは実際には複数値のフィールドではないため、Personごとに1つの値であると思います。EXPLAIN PLANAggregateJoin(Fields!StrID.Value, ", ")Fields!StrID.Value

SQLまたはReportBuilder2.0 / Visual Basicのいずれかを使用して、関連付けられたStrIDのリストをPersonごとに1行に表示する方法を教えてもらえますか?

編集:誰かがそれを使用して創造的な解決策を考えることができれば、私はLAG関数 を使用することができます。関数PARTITION BYと組み合わせて使用​​することもできます。LAG

4

3 に答える 3

1

ここhttp://www.sqlsnippets.com/en/topic-11787.html には、少なくとも10個のメソッドがあり、そのうちのいくつかは追加のオブジェクトを作成する必要がありません。それらのいずれかを試して、Oracleのバージョンに適しているかどうかを確認できます。

于 2010-03-01T21:34:41.060 に答える
0

トム・カイトのサイトを見たことがありますか?「ピボット」を検索すると、結果が役立つ場合があります。

例えば

http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:124812348063

また

http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:15151874723724

残念ながら、レポート2.0にアクセスできません(幸い(?)6iから始めました!)ので、これがご使用の環境で機能するかどうかを確認できません。

于 2010-03-01T19:50:35.267 に答える
0

関数が機能していることを知った後、私はと前の行を取得し、それらを連結して、どういうわけかのすべての行に対してそれを続けLAGられるかもしれないと思いました。私はこのAskTomの質問を見つけ、それを自分のテーブルで機能するように適応させることができました。StrIDStrIDPerson

SELECT Person, 
       SUBSTR(
         MAX(list) KEEP (DENSE_RANK FIRST ORDER BY lev DESC),
         2
       ) AS StrIDs
FROM ( 
       SELECT Person,
              SYS_CONNECT_BY_PATH(StrID, ', ') AS list,
              LEVEL AS lev
       FROM (
              SELECT Person,
                     StrID,
                     LAG(StrID, 1)
                       OVER (PARTITION BY Person ORDER BY StrID) AS prev_id
              FROM my_table
              WHERE other_conditions = 'blah blah'
            )
       START WITH prev_id IS NULL
       CONNECT BY PRIOR StrID=prev_id
     )
GROUP BY Person
ORDER BY Person

私は今、私が期待した形式でデータを取得します。

Person StrIDs
jeff   a, b, c
linda  k, l, m
于 2010-03-01T21:41:20.447 に答える