如何解决如何合并同一表的两列数据?
考虑到我有一个存储过程导致以下结果。
存储过程代码
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列和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 join
表中的值,而后一个依赖表。
使用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.Amount
和s2.Amount
列中都有值,这是一个附加选项):
Insert into @myData (Id,Name,Scale1,Scale2)
Select
I.Id,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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。