【发布时间】:2019-12-16 12:52:01
【问题描述】:
假设我有以下几行:
const rows = [
{ contract: "HC003", type: "Regular" },
{ contract: "HC005", type: "NOT-Regular" },
{ contract: "HC006", type: "NOT-Regular" },
{ contract: "HC007", type: "NOT-Regular" },
{ contract: "HC008", type: "Regular" },
{ contract: "HC015", type: "NOT-Regular" },
{ contract: "HC016", type: "Regular" }
];
每一行都需要添加一个group-列。此列获取前面行的最后一行的contract 值(这意味着顺序很重要),其中type 等于Regular。
在 JS 中,我会这样表达:
const findLastRegularContract = rangeEnd =>
rows
.slice(0, rangeEnd)
.reverse()
.find(row => row.type === "Regular");
const withGroups = rows.map((row, i) => ({
...row,
group: findLastRegularContract(i + 1).contract
}));
这导致以下结果:
[
{ contract: "HC003", type: "Regular", group: "HC003" },
{ contract: "HC005", type: "NOT-Regular", group: "HC003" },
{ contract: "HC006", type: "NOT-Regular", group: "HC003" },
{ contract: "HC007", type: "NOT-Regular", group: "HC003" },
{ contract: "HC008", type: "Regular", group: "HC008" },
{ contract: "HC015", type: "NOT-Regular", group: "HC008" },
{ contract: "HC016", type: "Regular", group: "HC016" }
]
我将如何在 SQL 查询中执行此数据转换? 有没有办法在 SQL 中的行上“映射”?或者是否有一种声明/惯用的方式来实现相同的结果?
编辑:有两个额外的列可以帮助保持适当的排序,即:
valid fromvalid to
【问题讨论】:
标签: sql sql-server mapping sequence transformation