【发布时间】:2021-09-30 11:01:55
【问题描述】:
说我有这张桌子
| Product | Version | Value |
|---|---|---|
| 1 | 1 | 1000 |
| 2 | 1 | 2000 |
| 3_a | 1 | 2500 |
| 3 | 1 | 3000 |
| 2_a | 1 | 1200 |
我想做的是:
对于产品不以“_a”结尾的每一行:
检查是否有任何以“_a”结尾的具有相同产品编号的行:
检查该行中的值是否是第一行值的 60%。
如果没有这样的行,创建它并将版本增加 1
在逻辑上:
For each row {
If exists(concatenate(row.Product,'_a')) as row2 then {
If not(row2.Value=row.Value*0.6) then {
Create row, Product=row2.Product, Version=row2.version+1,Value=row.value*0.6
}
} Else {
Create row, Product=concatenate(row.Product,'_a'), Version=1,Value=row.value*0.6
}
}
我已经尝试过这种方法(使用正确的语法),但不知道如何引用原始行来比较值或生成版本。期望的结果应该是两个新行:
| Product | Version | Value |
|---|---|---|
| 1_a | 1 | 600 |
| 3_a | 2 | 1800 |
使用 SQL Server 2005
产品可以有重复,只要版本号不同。
编辑:
如果以 '_a' 结尾的产品的最新版本具有不正确的值,我还想添加具有正确值的更新版本:
如果我有: |产品 |版本 |价值 | |---------|---------|--------| | 1 | 1 | 1000 | | 1_a | 1 | 600 | | 1_a | 2 | 1000 |
那我想补充一下: |产品 |版本 |价值 | |---------|---------|--------| | 1_a | 3 | 600 |
【问题讨论】:
-
您使用的是旧的不受支持的 SQL Server 版本吗? (如果是这样,为什么?)。或者你在使用 MySQL 吗?这还不清楚。
-
我确实在使用旧的、不受支持的 2005 版 SQL Server(我没有更新公司应用程序的权限/权限)。
标签: mysql sql sql-server-2005