从两个不同的 select 语句中获取两行
get two rows from two different select statements
我有一个 table 类似下面的东西:
table_a
k | id | results
--------------------
a | 1 | mango
b | 1 | orange
c | 2 | apple
d | 2 | banana
a | 2 | mango
我有两个 select 语句,结果如下:
第一select
select k, id, results from
table_a where id = 1
结果:
k | id | results
--------------------
a | 1 | mango
b | 1 | orange
秒select
select k, id, results from
table_a where id = 2
结果:
k | id | results
--------------------
c | 2 | apple
d | 2 | banana
a | 2 | mango
我怎样才能得到如下结果:
k | id | abc | xyz
------------------------
a | 1 | mango | mango
b | 1 | orange| xx
c | 2 | xx | apple
d | 2 | xx | banana
谢谢戈尔贡,普拉文。我从两个方面都得到了结果。
我还有一个 table 如下:
table_b
k | 1 | 2
--------------------
a | |
b | |
c | |
d | |
当我尝试使用以下查询更新 table_b 时:
update table_b set
abc = x.abc, xyz = x.xyz from (
select k, id, result as abc, 'xx' as xyz
from table_a
where id = 1
union all
select k, id, 'xx' as abc, result as xyz
from table_a
where id = 2 ) x
where table_b.k = x.k
我得到的结果如下:
table_b
k | 1 | 2
--------------------
a | xx | mango
b | orange| xx
c | xx | apple
d | xx | banana
我怎样才能得到下面的结果
table_b
k | 1 | 2
--------------------
a | mango | mango
b | orange| xx
c | xx | apple
d | xx | banana
谢谢,
一种方法使用 union all
:
select k, id, results as abc, 'xx' as xyz
from table_a
where id = 1
union all
select k, id, 'xx' as abc, results as xyz
from table_a
where id = 2;
另一个只是使用 case
:
select i, id,
(case when id = 1 then results else 'xx' end) as abc,
(case when id = 2 then results else 'xx' end) as xyz
from table_a
where id in (1, 2);
请检查此方法是否使用了 CASE。
DECLARE @table TABLE
(k CHAR (2),id INT,results VARCHAR(10))
INSERT INTO @table
(k,id,results)
VALUES
('a',1,'mango'),('b',1,'orange'),('c',2,'apple'),('d',2,'banana'),('a',2,'mango')
SELECT
k, id,
(CASE WHEN id = 1 THEN results ELSE 'xx' END) AS abc,
(CASE WHEN id = 2 THEN results ELSE 'xx' END) AS xyz
FROM
@table
你能试试下面的代码吗
DECLARE @table_b TABLE
(k CHAR (2),[1] VARCHAR(10),[2] VARCHAR(10))
INSERT INTO @table_b
(k)
VALUES
('a'),('b'),('c'),('d'),('a')
DECLARE @table TABLE
(k CHAR (2),id INT,results VARCHAR(10))
INSERT INTO @table
(k,id,results)
VALUES
('a',1,'mango'),('b',1,'orange'),('c',2,'apple'),('d',2,'banana'),('a',2,'mango')
SELECT
k, id,
(CASE WHEN id = 1 THEN results ELSE 'xx' END) AS abc,
(CASE WHEN id = 2 THEN results ELSE 'xx' END) AS xyz
FROM
@table
UPDATE
@table_b
set
[1] = x.abc, [2] = x.xyz from
(
SELECT
k, id, results as abc, 'xx' as xyz
from
@table
where id = 1
union all
select
k, id, 'xx' as abc, results as xyz
from
@table
where id = 2 ) x
我相信这是您正在寻找的预期输出。
我有一个 table 类似下面的东西: table_a
k | id | results
--------------------
a | 1 | mango
b | 1 | orange
c | 2 | apple
d | 2 | banana
a | 2 | mango
我有两个 select 语句,结果如下:
第一select
select k, id, results from
table_a where id = 1
结果:
k | id | results
--------------------
a | 1 | mango
b | 1 | orange
秒select
select k, id, results from
table_a where id = 2
结果:
k | id | results
--------------------
c | 2 | apple
d | 2 | banana
a | 2 | mango
我怎样才能得到如下结果:
k | id | abc | xyz
------------------------
a | 1 | mango | mango
b | 1 | orange| xx
c | 2 | xx | apple
d | 2 | xx | banana
谢谢戈尔贡,普拉文。我从两个方面都得到了结果。
我还有一个 table 如下:
table_b
k | 1 | 2
--------------------
a | |
b | |
c | |
d | |
当我尝试使用以下查询更新 table_b 时:
update table_b set
abc = x.abc, xyz = x.xyz from (
select k, id, result as abc, 'xx' as xyz
from table_a
where id = 1
union all
select k, id, 'xx' as abc, result as xyz
from table_a
where id = 2 ) x
where table_b.k = x.k
我得到的结果如下:
table_b
k | 1 | 2
--------------------
a | xx | mango
b | orange| xx
c | xx | apple
d | xx | banana
我怎样才能得到下面的结果 table_b
k | 1 | 2
--------------------
a | mango | mango
b | orange| xx
c | xx | apple
d | xx | banana
谢谢,
一种方法使用 union all
:
select k, id, results as abc, 'xx' as xyz
from table_a
where id = 1
union all
select k, id, 'xx' as abc, results as xyz
from table_a
where id = 2;
另一个只是使用 case
:
select i, id,
(case when id = 1 then results else 'xx' end) as abc,
(case when id = 2 then results else 'xx' end) as xyz
from table_a
where id in (1, 2);
请检查此方法是否使用了 CASE。
DECLARE @table TABLE
(k CHAR (2),id INT,results VARCHAR(10))
INSERT INTO @table
(k,id,results)
VALUES
('a',1,'mango'),('b',1,'orange'),('c',2,'apple'),('d',2,'banana'),('a',2,'mango')
SELECT
k, id,
(CASE WHEN id = 1 THEN results ELSE 'xx' END) AS abc,
(CASE WHEN id = 2 THEN results ELSE 'xx' END) AS xyz
FROM
@table
你能试试下面的代码吗
DECLARE @table_b TABLE
(k CHAR (2),[1] VARCHAR(10),[2] VARCHAR(10))
INSERT INTO @table_b
(k)
VALUES
('a'),('b'),('c'),('d'),('a')
DECLARE @table TABLE
(k CHAR (2),id INT,results VARCHAR(10))
INSERT INTO @table
(k,id,results)
VALUES
('a',1,'mango'),('b',1,'orange'),('c',2,'apple'),('d',2,'banana'),('a',2,'mango')
SELECT
k, id,
(CASE WHEN id = 1 THEN results ELSE 'xx' END) AS abc,
(CASE WHEN id = 2 THEN results ELSE 'xx' END) AS xyz
FROM
@table
UPDATE
@table_b
set
[1] = x.abc, [2] = x.xyz from
(
SELECT
k, id, results as abc, 'xx' as xyz
from
@table
where id = 1
union all
select
k, id, 'xx' as abc, results as xyz
from
@table
where id = 2 ) x
我相信这是您正在寻找的预期输出。