2016-04-25 5 views
0

私は、おそらく既に答えられている質問をしていますが、データベースから必要なものを正しく取得する方法を理解するのは本当に苦労しています。私は使用可能なWBSコードを取得しようとしているプリマベーラP6データベースを持っています。しかし、私はこれをレポートダッシュボードに組み込んでいるので、単に親子値を連結する以上のことをする必要があります。私の質問は2つの部分に分かれますが、ここで私の質問を理解するために、データベースの基本モデルです。レベルの列を持つT-SQLの再帰的な親子選択

wbs_id wbs_short_name parent_wbs_id 
1   CONTR    null 
2   RET    null 
3   PRC    1 
4   FEE    1 
5   PRC    2 
6   FEE    2 
7   100    3 
8   110    4 
9   200    5 
10  210    6 

私の最初の質問は、私は別の平準化の列に私wbs_short_nameのそれぞれ異なる「レベル」を与えるクエリを書くことができる方法ですか?最終結果は次のようになります。

Level_1 Level_2  Level_3 Level_4 
CONTR  PRC   100  null 
CONTR  FEE   110  null 
RET  PRC   200  null 
RET  FEE   210  null 

実際のデータベースにレベルが約7レベルにまで及ぶが、それはこの例をovercomplicateしまうので、私はlevel_4を追加しました。私の2番目の質問ははるかに簡単です(もっと期待しています)。これらのレベルを連結して1つのWBSコードにまとめた余分な終了列を追加することは可能ですか?それは次のようになります。

Level_1 Level_2  Level_3 WBS 
CONTR  PRC   100  CONTRPRC100 
CONTR  FEE   110  CONTRPRC110 
RET  PRC   200  RETPRC200 
RET  FEE   210  RETPRC210 

私は自分のダッシュボードにスライサーコントロールのレベルの列を必要と私はWBSは私が私の他のデータソースへの私のP6データベースへの参加を許可するリンクテーブルを作成できるようにする必要がありますこれらのWBSコードを使用します。与えられたすべての助けをありがとう。

+0

あなたがこの作品を作るために起こって二つの異なる技術を持っています。まず、データを取得するための再帰的なcteです。次に、FOR XMLを使用して行の値を連結する必要があります。私たちは助けてもらえますが、まずあなたからの情報が必要です。ここは素晴らしい場所です。始めること。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

答えて

0

が、私は最後にそれを考え出した、ここで私はそれをやった方法は次のとおりです。

SELECT l1.wbs_short_name l1_wbs_short_name, 
    l2.wbs_short_name l2_wbs_short_name, 
    l3.wbs_short_name l3_wbs_short_name, 
    l4.wbs_short_name l4_wbs_short_name, 
    l5.wbs_short_name l5_wbs_short_name, 
    l6.wbs_short_name l6_wbs_short_name, 
    CONCAT(l1.wbs_short_name, l2.wbs_short_name, l3.wbs_short_name) as WBS, 
    l3.wbs_id 
FROM PROJWBS l1 
    LEFT JOIN PROJWBS l2 ON l2.parent_wbs_id = l1.wbs_id 
    LEFT JOIN PROJWBS l3 ON l3.parent_wbs_id = l2.wbs_id 
    LEFT JOIN PROJWBS l4 ON l4.parent_wbs_id = l3.wbs_id 
    LEFT JOIN PROJWBS l5 ON l5.parent_wbs_id = l4.wbs_id 
    LEFT JOIN PROJWBS l6 ON l6.parent_wbs_id = l5.wbs_id 
WHERE l1.parent_wbs_id = 1 
    AND l3.wbs_id IS NOT NULL 
ORDER BY CONCAT(l1.wbs_short_name, l2.wbs_short_name, l3.wbs_short_name) 
関連する問題