![](/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.