2016-04-01 14 views
0

2つのテーブルを結合する必要があります。2つ目のテーブルを2番目のテーブルの値を繰り返さずに結合する

例:事前に

Id -- ItemName -- Total 

1 -- A ---  Null<br/> 
1 -- B ---  Null<br/> 
1 -- C ---  100<br/> 
2 -- A ---  Null<br/> 
2 -- B ---  300<br/> 

ありがとう:

Table 1: tbl_Item 

Id ---- ItemName 

1 ----- A<br/> 
1 ----- B<br/> 
1 ----- c<br/> 
2 ----- A<br/> 
2 ----- B<br/> 


Table 2: tbl_Detail 

Id ---- Total 

1 ---- 100 <br/> 
2 ---- 300<br/> 

私はテーブルを結合し、次の結果を取得する必要があります。

+1

ルールを説明してください。覚えておいてください:SQLテーブルは*順序付けされていない*セットを表します。したがって、グループ内に最初の行または最後の行はありません。 –

+0

SQLの "join"プロパティを使用することができます。このリンクを参照してください。http://www.w3schools.com/sql/sql_join.asp – Shiv

+0

@Jayなぜ私は多くの "id"名前 "... – Shiv

答えて

0

あなたはrow_number()を使用して不定単一の行にtotal値を割り当てることができます:あなたはおそらく、指定された順序を(持っている場合

select t.id, t.ItemName, 
     (case when row_number() over (partition by t.id order by (select NULL)) = 1 
      then d.total 
     end) as total 
from tbl_item t join 
    tbl_detail d 
    on t.id = d.id; 

を別の列で)、(select null)を適切なロジックに置き換えます。たとえば、データの例では、i.name descを使用することがありますが、実際に探している順序が間違っています。

+0

ありがとう...それは仕事です – Jay

0

あなたはこのためにROW_NUMBERを使用することができます。

;WITH CTE AS (
    SELECT Id, ItemName, 
      ROW_NUMBER() OVER (PARTITION BY Id ORDER BY ItemName DESC) AS rn 
    FROM tbl_Item 
) 
SELECT t1.Id, t1.ItemName, 
     CASE WHEN t1.rn = 1 THEN t2.Total END AS Total 
FROM CTE AS t1 
LEFT JOIN tbl_Detail AS t2 ON t1.Id = t2.Id 
関連する問題