如何合并相同 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 join
ed 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.Amount
和 s2.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;
假设我有一个存储过程,结果如下。
存储过程代码
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 join
ed 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.Amount
和 s2.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;