1

私は次のCTEを持っています:

;WITH combo (id, [program_name]) AS
(
    SELECT
    1
    , CAST('' AS VARCHAR(MAX))
    UNION ALL
    SELECT
        cte.id + 1
        ,(cte.[program_name] + pl.[program_name] + '; ')
    FROM (
        SELECT
        RowNum = ROW_NUMBER() OVER (ORDER BY people_id)
        --people_id
        ,p.[program_name]
        FROM event_log_Rv E
        JOIN PROgrams_view p on p.program_info_id = e.program_providing_service
 where people_id = 'DFA3AFE5-F681-4B1B-89F0-31D04FA6BF7D'
   ) pl
    JOIN combo cte ON pl.RowNum = cte.id
)
SELECT TOP 1 id, [program_name] FROM combo ORDER BY id DESC

この CTE を実行すると、次のエラーが発生します。

メッセージ 530、レベル 16、状態 1、行 1
ステートメントは終了しました。ステートメントが完了する前に、最大再帰回数 100 を使い果たしました。

people_idとはデータ型です program_providing_serviceuniqueidentifier

行番号をリストする列をこの CTE に追加するにはどうすればよいですか? 私が最終的にやりたいことは、この CTE にすべてのプログラム/クライアントを表示させることです。

行番号を追加して CTE に参加し、この CTE で組み合わせることでこれを機能させようとしましたが、すべてのプログラム/クライアントを 1 行だけで表示する別の方法を考えることができれば、これを受け入れることができます。

たとえば、私は欲しい:

people_id                               Programs
DFA3AFE5-F681-4B1B-89F0-31D04FA6BF7D    IHS; MCP; DCS
4

1 に答える 1