1

すべてのプラットフォームで実行でき、ツリー構造 (実際のツリー構造ではありません) 形式で結果を返す SQL ステートメントが必要です。つまり、関連するすべての列が一緒に表示されます。SQLを使用して次の形式を実現することは可能ですか. 3 つの列 (GROUP_STEP、PREDECESSOR、COLUMNNUM) を持つ単純なテーブルがあります。期待される出力 ここに画像の説明を入力

サポートされるプラットフォーム: Oracle、SQL Server、DB2、Sybase。次のデータが異なる形式のテーブルから SELECT ステートメントを探しています。

@diaho の提案の後、以下は出力です ここに画像の説明を入力

4

2 に答える 2

0

テーブルに基づいて、未加工のテーブルには列と列Group_Stepのみがあり、列はツリー内のリーフのレベルの総数を表していると想定しています。たとえば、にはがあるので、合計 3 つの「レベル」があります。その場合は、値を計算するために再帰クエリが必要です。すべてのプラットフォームについて話すことはできませんが、SQL Server の場合は CTE を使用できます。PredecessorColumnNumPC_Wrap1Predecessor BENEFITSPredecessor COPY_BUDGColumnNum

編集:a_horse_with_no_nameの提案に従って「恐ろしい非標準の角括弧」を削除しました:)

-- Setup table
CREATE TABLE #Temp
(
    Group_Step VARCHAR(100),
    Predecessor VARCHAR(100)
)

-- Setup dummy data
INSERT INTO #Temp
(
    Group_Step,
    Predecessor
)
SELECT 'ACT_BD_ACT', '' UNION
SELECT 'COPY_BUDG', '' UNION
SELECT 'COPY_BUDG2', '' UNION
SELECT 'BENEFITS', 'COPY_BUDG' UNION
SELECT 'BENEFITS', 'COPY_BUDG2' UNION
SELECT 'PC_WRAP1', 'BENEFITS' UNION
SELECT 'PC_WRAP2', 'BENEFITS' UNION
SELECT 'ALLC1', '' UNION
SELECT 'ALLC2', '' UNION
SELECT 'ALLC3', 'ALLC2' UNION
SELECT 'TCP1', 'ALLC3' UNION
SELECT 'TCP1', 'ALLC4' UNION
SELECT 'COPY_BUDG3', '' UNION
SELECT 'COPY_BUDG4', '';

-- Actual solution starts here:
WITH Result
(
    Group_Step,
    Predecessor,
    ColumnNum
)
AS
(
-- Anchor member definition
SELECT
    Group_Step,
    Predecessor AS Predecessor,
    1 AS ColumnNum
FROM
    #Temp
WHERE
    Predecessor = ''
UNION ALL
-- Recursive member definition
SELECT
    t.Group_Step,
    t.Predecessor,
    ColumnNum + 1 AS ColumnNum
FROM
    #Temp AS t
JOIN
    Result AS r
ON
    t.Predecessor = r.Group_Step    
)
-- Statement that executes the CTE
SELECT DISTINCT
    Group_Step,
    Predecessor,
    ColumnNum
FROM
    Result
-- EDIT #2: Adding ORDER BY per Op's comment
ORDER BY
    ColumnNum

DROP TABLE #Temp
于 2013-04-27T04:40:19.867 に答える
0
select groupnum,predecessor ,count(groupnum) as columnum group by groupnum,predecessor

テーブルスキーマの詳細を提供すると、答えが変わる可能性があります!!!

于 2013-04-26T23:38:53.723 に答える