根据两列获取记录。如果两列的值相同,则为一条记录,否则为2条记录

时间:2019-09-03 08:26:34

标签: sql postgresql

我有一个用例,其中我们有一个表,可以说 table_a

table_a有多个列,让我们考虑3个 a,b和c

table_a

|a|b|c|
|1|1|x|
|2|3|y|

需要输出

  1. 如果a和b的值相同,则需要一个记录。
  2. 如果a和b的值不同,则需要两条记录。

预期输出:

|a|b|c|
|1|1|x|
|2|3|y|
|2|3|y|

2 个答案:

答案 0 :(得分:2)

demo:db<>fiddle

SELECT
    t.*
FROM
    table_a t,
    unnest(CASE WHEN a = b THEN ARRAY[1] ELSE ARRAY[1,1] END)

返回集合的功能可以复制记录。在这种情况下,unnest()函数将展开作为参数创建的数组。如果a等于b,则创建一个仅包含一个元素的数组。在这种情况下,unnest()函数仅扩展一条记录。否则,将创建一个包含两个元素的数组,从而导致包含两个记录的扩展。

答案 1 :(得分:0)

您可以使用横向联接在不使用数组的情况下执行此操作:

select t.a, t.b, t.c
from t cross join lateral
     (values (1), (2)) n(n)
where n.n = 1 or t.a <> t.b;