我有一个用例,其中我们有一个表,可以说 table_a
table_a有多个列,让我们考虑3个 a,b和c 。
table_a
|a|b|c|
|1|1|x|
|2|3|y|
需要输出
预期输出:
|a|b|c|
|1|1|x|
|2|3|y|
|2|3|y|
答案 0 :(得分:2)
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;