如何将临时表AllYears列替换为YearFrom/YearTo并合并重复行?
解决方案:合并同组记录的年份范围
你的需求是将除年份外其他字段完全一致的记录合并,用最小年份作为YearFrom,最大年份作为YearTo。核心是通过GROUP BY对重复分组字段聚合,配合MIN()和MAX()函数提取年份区间。
原始临时表数据
StockID SKU Type Id Make Model Variant CC AllYears 000164 JTR16.40 36 Aprilia Tuareg Wind 125 1988 000541 JTR5.41 1789 Aprilia ETX Tuareg 125 1985 000541 JTR5.41 1789 Aprilia ETX Tuareg 125 1986 000541 JTR5.41 1789 Aprilia ETX Tuareg 125 1987 000543 JTR5.43 24 Aprilia Pegaso 600 1990 000543 JTR5.43 24 Aprilia Pegaso 600 1991 000543 JTR5.43 24 Aprilia Pegaso 600 1992 000543 JTR5.43 24 Aprilia Pegaso 600 1993 000543 JTR5.43 38 Aprilia Tuareg Wind 600 1990 000543 JTR5.43 38 Aprilia Tuareg Wind 600 1991 000543 JTR5.43 38 Aprilia Tuareg Wind 600 1992 000543 JTR5.43 33 Aprilia SPX Tuareg Paris Dakar 600 1988 000543 JTR5.43 33 Aprilia SPX Tuareg Paris Dakar 600 1989 000543 JTR5.43 33 Aprilia SPX Tuareg Paris Dakar 600 1990
目标输出格式
StockID SKU Type Id Make Model Variant CC YearFrom YearTo 000164 JTR16.40 36 Aprilia Tuareg Wind 125 1988 1988 000541 JTR5.41 1789 Aprilia ETX Tuareg 125 1985 1987 000543 JTR5.43 24 Aprilia Pegaso 600 1990 1993 000543 JTR5.43 38 Aprilia Tuareg Wind 600 1990 1992 000543 JTR5.43 33 Aprilia SPX Tuareg Paris Dakar 600 1988 1990
实现SQL代码
假设临时表名为#TempTable,执行以下语句即可得到目标结果:
SELECT StockID, SKU, Type, Id, Make, Model, Variant, CC, MIN(AllYears) AS YearFrom, MAX(AllYears) AS YearTo FROM #TempTable GROUP BY StockID, SKU, Type, Id, Make, Model, Variant, CC ORDER BY StockID, Id;
逻辑说明
- 分组规则:将所有除
AllYears外的字段作为分组键,确保只有完全相同的记录会被归为一组。 - 年份聚合:对每组的
AllYears分别取最小值(起始年份)和最大值(结束年份),替换原有的单一年份字段。 - 结果排序:按
StockID和Id排序,保持结果与目标格式的顺序一致。
内容的提问来源于stack exchange,提问作者GarethH
相关产品推荐
相关产品推荐

