组合两个表而不重复第二个表值

时间:2016-04-01 11:50:26

标签: sql-server

我有两张桌子需要加入。

示例:

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

我需要加入表格并获得以下结果:

Id -- ItemName --  Total

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

提前致谢。

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

您可以使用totalrow_number()值分配给 indeterminate 单行:

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,但我怀疑这是您正在寻找的实际订单。