2016-04-01 16 views
0

Birleştirilmesi gereken iki tablom var.İki tabloyu tekrar etmeden ikinci tablo değerini birleştirin

Örnek: Önceden

Id -- ItemName -- Total 

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

Teşekkür:

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/> 

Ben tabloları birleştirmek ve aşağıdaki sonucu almak gerekir.

+1

Lütfen kuralları açıklayınız. Unutmayın: SQL tabloları * sırasız * setleri temsil eder, bu yüzden bir grupta ilk veya son satır yoktur. –

+0

SQL'in "join" özelliğini kullanabilirsiniz ... Bu bağlantıya bakın http://www.w3schools.com/sql/sql_join.asp – Shiv

+0

@Jay Neden birçok "öğe için tek" id "olduğunu söyle adı "... – Shiv

cevap

0

Sen row_number() kullanarak bir belirsiz tek satıra total değer atayabilirsiniz:

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; 

bir sipariş varsa (muhtemelen belirtilmiş Başka bir sütunla), ardından (select null)'u uygun mantıkla değiştirin. Örneğin, örnek veriler için, i.name desc kullanabilirsiniz, ancak aradığınız gerçek sipariş olduğundan şüpheliyim.

+0

teşekkürler ... iş var – Jay

0

Bunun için ROW_NUMBER kullanabilirsiniz:

;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 
İlgili konular