这个看似简单的表存在一些问题。我正在尝试将NEW_LVL列行的值更改为1(如果所有TRAINING_LVL行的值都为1)或0(如果TRAINING_LVL行之一的值是2),在这种情况下为NEW_NR值10。
USER_NR TRAINING_NR TRAINING_LVL NEW_NR NEW_LVL
49867 8400 2 10 0
49867 8490 1 10 1
49867 8480 1 10 1
到目前为止,我一直在尝试使用CASE方法来更改它,但是似乎无法更改它,以便仅在所有行都满足条件时才修改NEW_LVL值。相反,如果满足条件,它将更改每个单独行的值。
UPDATE dbo.MTD
SET NEW_LVL =
CASE
WHEN NEW_NR = 10 AND TRAINING_LVL = 1 THEN 1
ELSE 0
END
有什么更好的方法?我尝试使用HAVING子句,但未成功。
答案 0 :(得分:0)
使用INSTEAD OF DELETE
!
WHERE
如果您使用UPDATE dbo.MTD
SET NEW_LVL = 1
WHERE NEW_NR = 10 AND TRINING_LVL = 1
,则可以拥有CASE
,但是最好使用ELSE NEW_LVL
。
答案 1 :(得分:0)
结合@jarlh的注释,我们可以尝试编写一个查询,该查询将输出所需的内容:
SELECT
USER_NR,
TRAINING_NR,
TRAINING_LVL,
NEW_NR,
CASE WHEN NOT EXISTS (SELECT 1 FROM dbo.MTD
WHERE TRAINING_LVL <> 1 AND NEW_NR = 10)
THEN 1 ELSE 0 END AS NEW_LVL
FROM dbo.MTD;
请注意,如果您希望新级别仅反映特定用户或某些其他分区,则我们将必须将存在查询关联起来。假设您要按用户报告,可以采用以下方法:
SELECT
USER_NR,
TRAINING_NR,
TRAINING_LVL,
NEW_NR,
CASE WHEN NOT EXISTS (SELECT 1 FROM dbo.MTD t2
WHERE t2.USER_NR = t1.USER_NR AND t2.TRAINING_LVL <> 1 AND
t2.NEW_NR = 10)
THEN 1 ELSE 0 END AS NEW_LVL
FROM dbo.MTD t1;
答案 2 :(得分:0)
您可以使用以下查询-
如果记录中有TRAINING_LVL!= 1且NEW_NR = 10,则此查询将返回计数>0。如果计数> 0,则意味着您需要更新0否则为1
declare @count int
select @count = count(1) from mtd where TRAINING_LVL != 1 and NEW_NR = 10
print @count
此查询将根据需要更新表中的值。
update mtd
set NEW_LVL = (case when @count> 0 then 0 else 1 end)
where NEW_NR = 10
答案 3 :(得分:0)
尝试一下;
.star option {
background-color: blue;
}
.star option:hover {
background-color: grey;
}