请帮助我,
我有3列的表,当我选择列时我需要根据id来设置值
Id Days Values
1 5 7
1 NULL NULL
1 NULL NULL
2 7 25
2 NULL NULL
2 8 274
2 NULL NULL
我需要一个结果
Id Days Values
1 5 7
1 5 7
1 5 7
2 7 25
2 7 25
2 8 274
2 8 274
`
答案 0 :(得分:1)
生成一组具有所需重复值的数据(B)。然后返回到包含要重复的记录数的基集(A)。这假设每个ID只会填充一个记录。如果不是这种情况,那么你将无法得到理想的结果。
SELECT B.ID, B.MDays as Days, B.Mvalues as values
FROM TABLE A
INNER JOIN (SELECT ID, max(days) mDays, Max(values) Mvalues
FROM Table
GROUP BY ID) B
on A.ID = B.ID
由于有问题的更新....--
这会让你接近但没有办法在ID中定义分组我不能将记录细分为2和2
SELECT B.ID, B.Days as Days, B.values as values
FROM TABLE A
INNER JOIN (SELECT Distinct ID, days, values
FROM Table
GROUP BY ID) B
on A.ID = B.ID
and A.days is null
这还不够,因为我们仍然不知道如何订购行...... 它假定表中的顺序是不可信任的。我们使用Row_number Over语法为表中的每一行生成一个行号。使用ID和日期以及ID天的顺序进行分组(由于空值而无效)
然后,我们将此数据集重新加入ID和日期的一组不同值 让我们接近......但我们仍然需要一些分组逻辑。超出处理空记录和缺乏顺序或分组的ID。
With CTE AS (
SELECT ID, Days, Values, Row_Number() Over (partition by ID, Days ORDER BY ID, Days) RN
FROM Table)
SELECT *
FROM (SELECT Distinct ID, Days, Values, max(RN) mRN FROM CTE GROUP BY ID, Days, Values) A
INNER JOIN CTE B
ON A.ID = B.ID
and A.Days = B.Ddays
and mRN <= B.RN
Order by B.RN