Sql 如何合并同一表的两列数据?

Sql 如何合并同一表的两列数据?,sql,sql-server,left-join,sql-null,Sql,Sql Server,Left Join,Sql Null,假设我有一个导致以下结果的存储过程 存储过程代码 DECALRE @myTab TABLE( Id int NOT NULL, Name nvarchar(30) NOT NULL, Scale1 int, Scale2 int ) Insert into @myData(Id,Name,Scale1,Scale2) Select I.Id, I.Name, S1.Amount, S2.Amount From Information I Left Join Scale1 S

假设我有一个导致以下结果的存储过程

存储过程代码

DECALRE @myTab TABLE(
  Id int NOT NULL,
  Name nvarchar(30) NOT NULL,
  Scale1 int,
  Scale2 int
)

Insert into @myData(Id,Name,Scale1,Scale2)
Select 
I.Id,
I.Name,
S1.Amount,
S2.Amount
From Information I 
Left Join Scale1 S1 on I.Scale1Id = S1.Id
Left Join Scale2 S2 on I.Scale2Id = S2.Id


Select * From @myTab

下面是结果表

+------+----------+--------+---------+
| ID   | NAME     | Scale1 | Scale2  |
+------+----------+--------+---------+
|    1 | Ramesh   |   NULL | 1230    |
|    2 | Khilan   |   1560 | NULL    |
|    3 | kaushik  |   3000 | NULL    |
|    3 | kaushik  |   1500 | NULL    |
|    4 | Chaitali |   2060 | NULL    |
|    5 | Hardik   |   NULL | 1569    |
|    6 | Komal    |   NULL | 2548    |
|    7 | Muffy    |   NULL | 1256    |
+------+----------+--------+---------+
现在我想将列Scale1和scale2组合起来,使其成为单列Scale,即没有空数据,如下面的示例所示

+------+----------+--------+
| ID   | NAME     | Scale  |  
+------+----------+--------+ 
|    1 | Ramesh   |   1230 |  
|    2 | Khilan   |   1560 | 
|    3 | kaushik  |   3000 |  
|    3 | kaushik  |   1500 |  
|    4 | Chaitali |   2060 |  
|    5 | Hardik   |   1569 |   
|    6 | Komal    |   2548 |  
|    7 | Muffy    |   1256 |  
+------+----------+--------+ 
我如何才能做到这一点,请帮助。

您可以使用
coalesce()

这将优先考虑第一个
左联接表中的值,并返回到另一个表。

使用
合并()


另一种可能的方法是
ISNULL()
(如果
s1.Amount
s2.Amount
列中都有值,则这是一个附加选项):


嗯。似乎您要取消打印数据:

select t.id, t.name, v.scale
from @mytable t cross apply
     (values (t.scale1), (t.scale2)) v(scale)
where v.scale is not null;
Select 
I.Id,
I.Name,
coalesce(S1.Amount,S2.Amount) as amount
From Information I 
Left Join Scale1 S1 on I.Scale1Id = S1.Id
Left Join Scale2 S2 on I.Scale2Id = S2.Id
Insert into @myData (Id,Name,Scale1,Scale2)
Select 
   I.Id,
   I.Name,
   ISNULL(S1.Amount, 0) + ISNULL(S2.Amount, 0) AS Amount
From Information I 
Left Join Scale1 S1 on I.Scale1Id = S1.Id
Left Join Scale2 S2 on I.Scale2Id = S2.Id
select t.id, t.name, v.scale
from @mytable t cross apply
     (values (t.scale1), (t.scale2)) v(scale)
where v.scale is not null;