从一组列的最小值中选择行值的最小值

时间:2019-11-11 17:14:21

标签: sql sql-server

Data Sample

SET @jandate1 = '2019-01-31'
SELECT 
min(DATEDIFF (day,@jandate1,review_date)) as rentcount,
min(DATEDIFF(day,@jandate1,expiry_date)) as expcount,
min(DATEDIFF(day,@jandate1,start_date)) as startcount,
min(DATEDIFF(day,@jandate1,termination_date)) as termicount,
min(DATEDIFF(day,@jandate1,first_o_date) as fcount,
min(DATEDIFF(day,@jandate1,Second_o_date) as scount
from datetablex

我将为上述查询获取一个值,如下所示

rentcount   expcount    startcount termicount  fcount scount
 335           273      -5662        242         273     515    

现在我需要选择expcount或fcount中的一个(目前最重要的是,稍后再排) 并将静态文本分配给“ expiry”或“ firstoption”之类的列 即获取每行(datediff列)的最小值,并根据该值为该行设置相应的静态文本

尝试了旋转和保护套,但发疯了

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则可以使用cross apply取消数据透视并选择最小的非负值:

with t as (
      SELECT min(DATEDIFF(day, @jandate1, review_date)) as rentcount,
             min(DATEDIFF(day, @jandate1, expiry_date)) as expcount,
             min(DATEDIFF(day, @jandate1, start_date)) as startcount,
             min(DATEDIFF(day, @jandate1, termination_date)) as termicount,
             min(DATEDIFF(day, @jandate1, first_o_date) as fcount,
             min(DATEDIFF(day, @jandate1, Second_o_date) as scount
      from datetablex
     )
select t.*, tt.*
from t cross apply
     (select top (1) v.*
      from (values ('rentcount', rentcount),
                   ('expcount', expcount),
                   ('startcount', startcount),
                   ('termicount', termicount),
                   ('fcount', fcount),
                   ('scount', scount)
           ) v(which, cnt)
       where cnt >= 0
       order by cnt asc
      ) tt;
相关问题