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列)的最小值,并根据该值为该行设置相应的静态文本
尝试了旋转和保护套,但发疯了
答案 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;