这应该很容易,但我陷入了困境。
它像图像一样简单,但是我有一个名为“类别”的列,一旦该行有一个类别,我希望这个值在一个新列中重复 'n' 次,比如说 10 次(或我想要的任何值) .
我尝试使用FIRST_VALUE()
,但没有关于何时出现此类别的模式,因此大多数时候我将“null”作为重复。
我见过ROW_NUMBER() OVER(PRECEDING AND FOLLOWING)
,但我不能在其中使用字符串,只是一个聚合,我不想计算,我想分类。我什至尝试使用CASE WHEN xxx category * 10
等,category + 10
但当然不起作用。
有什么建议吗?谢谢!
我试过的:
WITH table1 AS(
SELECT
date,
hour,
minute,
category,
ROW_NUMBER() OVER() AS rn
FROM table1),
table2 AS(
SELECT
*,
CASE
WHEN category IS NOT NULL THEN 1
ELSE 0
END AS flag_category
FROM table1)
SELECT
*,
CASE
WHEN flag_category = 1
THEN (SELECT
a.category,
FROM table2 AS a
INNER JOIN table2 AS b
ON a.rn = b.rn + 10)
ELSE '-'
END AS category_repetition
FROM table2
W H A T I H A V E WHAT I WANT
date hour minute qty category category_repetition
20210412 0 0 2 null null
20210412 0 1 0 null null
20210412 0 2 6 null null
20210412 0 3 7 null null
20210412 0 4 7 null null
20210412 0 5 6 null null
20210412 0 6 3 null null
20210412 0 7 8 null null
20210412 0 8 4 null null
20210412 0 9 3 category A category A
20210412 0 10 4 null category A
20210412 0 11 0 null category A
20210412 0 12 5 null category A
20210412 0 13 2 null category A
20210412 0 14 3 null category A
20210412 0 15 3 null category A
20210412 0 16 4 null category A
20210412 0 17 3 null category A
20210412 0 18 5 null category A
20210412 0 19 4 null category A