任务表
任务ID 任务审核 A符号 A标准 B符号 B标准 C符号 C标准 D符号 D标准 实际完成
1 > 10 > 8 > 6 < 6 9
2 > 20 > 16 > 13 < 13 14
A符号,B符号等等为字符型
A标准,B标准等等为数字型
要求:“实际完成”值先与“A标准”用“A符号”比较,若符合标准:任务审核=A,否则
“实际完成”值先与“B标准”用“B符号”比较,若符合标准:任务审核=B,以此类推。
任务ID 任务审核 A符号 A标准 B符号 B标准 C符号 C标准 D符号 D标准 实际完成
1 > 10 > 8 > 6 < 6 9
2 > 20 > 16 > 13 < 13 14
A符号,B符号等等为字符型
A标准,B标准等等为数字型
要求:“实际完成”值先与“A标准”用“A符号”比较,若符合标准:任务审核=A,否则
“实际完成”值先与“B标准”用“B符号”比较,若符合标准:任务审核=B,以此类推。
from
(select [任务Id], 'A' [标准], (case [A符号] when '>' then sign([实际完成] - [A标准]) else sign([A标准] - [实际完成]) end) as rel
from [任务表]
union
select [任务Id], 'B', (case [B符号] when '>' then sign([实际完成] - [B标准]) else sign([B标准] - [实际完成]) end)
from [任务表]
union
select [任务Id], 'C', (case [C符号] when '>' then sign([实际完成] - [C标准]) else sign([C标准] - [实际完成]) end)
from [任务表]
union
select [任务Id], 'D', (case [D符号] when '>' then sign([实际完成] - [D标准]) else sign([D标准] - [实际完成]) end)
from [任务表]) X
where rel = 1
group by [任务Id]
create table [任务表](
[任务Id] [int] IDENTITY(1,1) NOT NULL,
[A符号] [varchar](10),
[A标准] [int] NULL,
[B符号] [varchar](10),
[B标准] [int] NULL,
[C符号] [varchar](10),
[C标准] [int] NULL,
[D符号] [varchar](10),
[D标准] [int] NULL,
[实际完成] [int] NULL,
CONSTRAINT [PK_renwub] PRIMARY KEY ([任务Id]))
gotruncate table [任务表]
goinsert into [任务表]([A符号], [A标准], [B符号], [B标准], [C符号], [C标准], [D符号], [D标准], [实际完成])
values('>', 10, '>', 8, '>', 6, '<', 6, 9)
goinsert into [任务表]([A符号], [A标准], [B符号], [B标准], [C符号], [C标准], [D符号], [D标准], [实际完成])
values('>', 20, '>', 16, '>', 13, '<', 13, 14)
go
min([标准])和'A'[标准] 中的[标准]指的是那个标准啊
[任务Id] [int] IDENTITY(1,1) NOT NULL,
[任务审核] varchar(10),
[A符号] [varchar](10),
[A标准] [int] NULL,
[B符号] [varchar](10),
[B标准] [int] NULL,
[C符号] [varchar](10),
[C标准] [int] NULL,
[D符号] [varchar](10),
[D标准] [int] NULL,
[实际完成] [int] NULL,
CONSTRAINT [PK_renwub] PRIMARY KEY ([任务Id]))
goinsert into [任务表]([A符号], [A标准], [B符号], [B标准], [C符号], [C标准], [D符号], [D标准], [实际完成])
values('>', 10, '>', 8, '>', 6, '<', 6, 9)insert into [任务表]([A符号], [A标准], [B符号], [B标准], [C符号], [C标准], [D符号], [D标准], [实际完成])
values('>', 20, '>', 16, '>', 13, '<', 13, 14)
goDECLARE tb CURSOR GLOBAL
FOR
SELECT 'UPDATE 任务表 SET 任务审核 = CASE '
+ ' WHEN ' + RTRIM(实际完成) + ' ' + RTRIM(A符号) + ' ' + RTRIM(A标准) + ' THEN ''A'''
+ ' WHEN ' + RTRIM(实际完成) + ' ' + RTRIM(B符号) + ' ' + RTRIM(B标准) + ' THEN ''B'''
+ ' WHEN ' + RTRIM(实际完成) + ' ' + RTRIM(C符号) + ' ' + RTRIM(C标准) + ' THEN ''C'''
+ ' WHEN ' + RTRIM(实际完成) + ' ' + RTRIM(D符号) + ' ' + RTRIM(D标准) + ' THEN ''D'''
+ ' END'
+ ' WHERE CURRENT OF tb'
FROM 任务表
OPEN tb
DECLARE @s nvarchar(4000)
FETCH tb INTO @s
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC(@s)
FETCH tb INTO @s
END
CLOSE tb
DEALLOCATE tb
GOSELECT * FROM 任务表
GODROP TABLE 任务表
1 B > 10 > 8 > 6 < 6 9
2 C > 20 > 16 > 13 < 13 14
min(标准), 是指from后面的View中的[标准]列,view中对每个[任务Id]共有4行,分别是'A',
'B', 'C', 'D'
如果你要做update,想必对你来说已经很容易了
如果任务ID很多的话,用游标效率就更差。
update 表和视图的关联条件当然是任务Id相等。