Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL:在子查询中搜索_Sql Server_Tsql - Fatal编程技术网

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