![](/img/trans.png)
[英]SQL Server 2008 - update a column based on a column of similar grouping of row
[英]SQL Update based on grouping
我们的系统为每个期刊编号创建 2 行,并在每行上标记一个段。
第 1 行是系统生成的,第 2 行是用户输入前端的内容。
问题是每个日志的第二行,系统以用户在前端输入的方式填充段,而第一行填充段是如何存储在后端的——这意味着我们可以在整个过程中遇到区分大小写的问题期刊本身。 这不是期刊上的问题,但会导致进一步的问题。
目前表格如下所示
HMY | 杂志 # | 部分 |
---|---|---|
1个 | 10001 | 房子 |
2个 | 10001 | 屋 |
3个 | 10002 | 平坦的 |
4个 | 10002 | 平坦的 |
5个 | 10003 | 单元 |
6个 | 10003 | 单元 |
每个日志的第二行段必须更新以匹配第一行的段。
期望的最终结果:
HMY | 杂志 # | 部分 |
---|---|---|
1个 | 10001 | 房子 |
2个 | 10001 | 房子 |
3个 | 10002 | 平坦的 |
4个 | 10002 | 平坦的 |
5个 | 10003 | 单元 |
6个 | 10003 | 单元 |
它必须更新系统填充段的方式,因此如果它显示为所有大写字母,则第二行必须全部为大写字母等。
我尝试了各种方法,但没有一种方法能像我期望的那样有效。 例如,我试图找到按期刊编号分组的 min(hmy) 并更新按期刊编号分组的 max(hmy) 的段,但它不会。
还查看了基于前一行的更新值,但无法解决如何将该代码合并到我的问题中的问题。
您可以使用 LAG 获取以前的值并更新:
update t
set Segment = PrevSegment
FROM (
select *
, LAG(Segment) OVER(PARTITION BY [Journal #] ORDER BY HMY) AS prevSegment
FROM journaltable j
) t
WHERE prevSegment IS NOT NULL -- prevents writing the system generated value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.