2017-01-05 13 views
2

親レコードのデータを1行戻す必要があります。親レコードは多くの子レコードを持つことができますが、最初の2つの行(および親の行の合計数)だけが必要です。ここで子テーブルの最初の2行を選択

は、データの一例である:

ParentTable 
+-----------------------+ 
| ParentId | ParentData | 
+-----------------------+ 
|  1| Stuff  | 
|  2| Things  | 
|  3| Foo   | 
|  4| Bar   | 
------------------------- 

ChildTable 
+-------------------------------+ 
| ChildId | ParentId| ChildData | 
+-------------------------------+ 
|  1 |  1 | Alpha  | 
|  2 |  1 | Bravo  | 
|  3 |  2 | Charlie | 
|  4 |  2 | Delta  | 
|  5 |  2 | Echo  | 
|  6 |  3 | Foxtrot | 
--------------------------------- 

そして、ここでは私の望ましい結果である:

+-----------------------------------------------------------------+ 
| ParentId | ParentData | ChildData1 | ChildData2 | ChildRowCount | 
+-----------------------------------------------------------------+ 
|  1 | Stuff  | Alpha  | Bravo  |    2 | 
|  2 | Things  | Charlie | Delta  |    3 | 
|  3 | Foo  | Foxtrot | (NULL)  |    1 | 
|  4 | Bar  | (NULL)  | (NULL)  |    0 | 
------------------------------------------------------------------- 

私は、これはサブクエリ、一時テーブルを必要とするかどうかわからないんだけど、かいくつかの並べ替えのJOINまたはGROUP BY。

最後に、私はSSISでこれを使用する必要がありますが、私はクエリから始めてそこから行くつもりです。

どのような種類のクエリを実行できますか?

+1

どのDBMSを使用していますか? –

+0

SSISに言及したためにSQL Serverが追加されました。*固有の*適切なタグでタグ付けしてください。 –

+0

*最初の2行*どのように?子テーブルからピックアップされる2つのレコードを指定するものは何ですか? –

答えて

3

派生テーブルを使用して、childdataテーブルの行に番号を付け、親あたりのchildidの数を数えます。 left joinこれを親テーブルに追加し、目的の結果を取得します。

select distinct p.parentid,p.parentdata, 
max(case when c.rnum =1 then c.childata end) over(partition by p.parentid,p.parentdata) as childdata1, 
max(case when c.rnum =2 then c.childata end) over(partition by p.parentid,p.parentdata) as childdata2, 
coalesce(c.childrowcount,0) as childrowcount 
from parenttable p 
left join (select c.* 
      ,row_number() over(partition by parentid order by childid) as rnum 
      ,count(*) over(partition by parentid) as childrowcount 
      from childtable c) c 
on c.parentid=p.parentid 
+0

これはかなり良い解決策です。私は正しい "ChildData1"、 "ChildData2"と "ChildRowCount"の値を取得していますが、行はグループ化されていません。質問のサンプルデータを調べると、ParentId = 2という3つの行があります。文全体の最後に「GROUP BY」を使用しようとしましたが、含める列がわかりません。 GROUP BYでエイリアスを使用できますか? –

+0

「distinct」を使用しています.iを含めるのを忘れました。編集を参照してください。 –

+0

それでした。あなたの返信をありがとう、@vkp。 –

関連する問題