Sql server T-SQL:在子查询中搜索
我的数据库中有以下可用数据:Sql server T-SQL:在子查询中搜索,sql-server,tsql,Sql Server,Tsql,我的数据库中有以下可用数据: Docnr Weight1 Weight2 F4879 479,43 484,62 F6463 505,43 509,62 F6464 505,43 509,62 F8461 531,43 535,62 F9716 532,43 561,62 F6461 533,43 561,62 F6137 609,43 613,62 F9843 60
Docnr Weight1 Weight2
F4879 479,43 484,62
F6463 505,43 509,62
F6464 505,43 509,62
F8461 531,43 535,62
F9716 532,43 561,62
F6461 533,43 561,62
F6137 609,43 613,62
F9843 609,43 613,62
F9764 635,43 613,62
现在,我希望输出一个额外的列“警告”,如下所示:
Docnr Weight1 Weight2 Warning
F4879 479,43 484,62 1
F6463 505,43 509,62 2
F6464 505,43 509,62 1
F8461 531,43 535,62 3
F9716 532,43 561,62 2
F6461 533,43 561,62 1
F6137 609,43 613,62 2
F9843 609,43 613,62 1
F9764 635,43 613,62
计算“警告”:
警告=前面valueWeight2子查询应该工作但需要order列作为基线的行数
declare @t table (Docnr varchar(10), weight1 float, weight2 float)
insert into @t
values
('F4879', 479.43, 484.62),
('F6463', 505.43, 509.62),
('F6464', 505.43, 509.62),
('F8461', 531.43, 535.62),
('F9716', 532.43, 561.62),
('F6461', 533.43, 561.62),
('F6137', 609.43, 613.62),
('F9843', 609.43, 613.62),
('F9764', 635.43, 613.62)
;with r as
(
select Docnr, weight1, weight2
, ROW_NUMBER() over(order by weight1) as nbr
from @t
)
select r0.nbr, min(r.nbr) - r0.nbr
from r as r0 join r on r0.weight2 < r.weight1
group by r0.nbr
到目前为止你尝试了什么?请显示一些努力,因此不是代码生成器服务。一个开始的提示:CASE。。。警告列何时获取值?逻辑?此查询是更大查询的一部分。这部分我真的不知道如何在SELECT中编写语句。同事们建议我循环使用计数器。这并不是说我太懒,不想寻找解决方案。。。“警告”栏是经过计算的Thanx man栏,这是我要找的。我自己找不到这个
declare @t table (Docnr varchar(10), weight1 float, weight2 float)
insert into @t
values
('F4879', 479.43, 484.62),
('F6463', 505.43, 509.62),
('F6464', 505.43, 509.62),
('F8461', 531.43, 535.62),
('F9716', 532.43, 561.62),
('F6461', 533.43, 561.62),
('F6137', 609.43, 613.62),
('F9843', 609.43, 613.62),
('F9764', 635.43, 613.62)
;with r as
(
select Docnr, weight1, weight2
, ROW_NUMBER() over(order by weight1) as nbr
from @t
)
select r0.nbr, min(r.nbr) - r0.nbr
from r as r0 join r on r0.weight2 < r.weight1
group by r0.nbr