如何合并相同 table 的两列数据?

How to combine two columns data of same table?

假设我有一个存储过程,结果如下。

存储过程代码

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

这是结果 Table。

+------+----------+--------+---------+
| 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 和 Scale 2 并使其成为单列 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():

select 
    i.id,
    i.name,
    coalesce(s1.amount, s2.amount) scale
from information i 
left join scale1 s1 on i.scale1id = s1.id
left join scale2 s2 on i.scale2id = s2.id

这会优先考虑第一个 left joined table 中的值,然后退回到另一个

使用coalesce()

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

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

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;