我想重复类别列,直到遇到下一个值。以下是表格的结构:
Category Term Date
-------------------- --------------
category1 a 12/7/2012
NULL b 12/7/2012
NULL c 12/7/2012
category2 a 13/7/2012
NULL b 13/7/2012
期望的输出:
Category Term Date
-------------------- --------------
category1 a 12/7/2012
category1 b 12/7/2012
category1 c 12/7/2012
category2 a 13/7/2012
category2 b 13/7/2012
我尝试使用Lead
和Lag
功能,但它无效。
答案 0 :(得分:2)
首先,这种数据结构很糟糕。如果记录属于某个类别,则应在该记录中提及,而不必从结果集中的某些排序派生。
说到顺序:如果您没有客观的方法按列值排序记录,则无法承担订单。
在编辑问题时,您提供了一个额外的列Date
,只要此日期唯一标识该类别,就可以生成所需的结果:
你可以写这个查询:
select max(category) over (partition by [Date]) as category,
term
from mytable;
这将产生所需的输出:
Category Term
--------------------
category1 a
category1 b
category1 c
category2 a
category2 b
答案 1 :(得分:-1)
假设您的表具有按升序排序的Id列。 如果没有,您可以通过row_number()函数创建一个新的Id号。
DECLARE @temps AS TABLE
(
Id int IDENTITY(1,1),
Category varchar(30),
Term varchar(10)
)
INSERT INTO @temps VALUES ('category1', 'a')
INSERT INTO @temps VALUES (NULL, 'b')
INSERT INTO @temps VALUES (NULL, 'c')
INSERT INTO @temps VALUES ('category2', 'a')
INSERT INTO @temps VALUES (NULL, 'b')
SELECT (
SELECT TOP 1 t2.Category
FROM @temps t2
WHERE t2.Id <= t.Id AND t2.Category IS NOT NULL
ORDER BY t2.Id DESC
) AS Category,
t.Term
FROM @temps t