从两个不同的 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

我相信这是您正在寻找的预期输出。