是否可以像下面这样更灵活地编写union select查询?为没有联合的每行选择x次
select
id,
1,
(1 + @defCapUp) * (p.Value + p.Premium),
getdate()
from Products p
union
select
id,
1,
(1 - @defCapDown) * (p.Value - p.Premium),
getdate()
from Products p
union
select
id,
case when p.Paydate > getdate() then 1 else 0 end,
(1 - @defCapUp) * (p.Value - p.Premium),
@nextYear
from Products p
union
select
id,
case when p.Paydate > getdate() then 1 else 0 end,
(1 + @defCapDown) * (p.Value + p.Premium),
@nextYear
from Products p
该语句为Products表中的每一行选择四行。唯一不同的是用于计算第二列和第二列值的公式。我认为在sql中应该有一种方法来编写上述代码,而不会有太多难看的代码重复。如果只有函数是第一类对象并且sql允许lambda表达式...
理查德的解决方案在下面是完美的,对于提供的示例非常有效。但我曾在一部开拓创新的例子,这使得这个问题有点强硬2个错别字:
select
id,
1,
(1 + @defCapUp) * (p.Value + p.Premium),
getdate()
from Products p
union
select
id,
1,
(1 - @defCapDown) * (p.Value - p.Payout),
getdate()
from Products p
union
select
id,
case when p.Paydate > getdate() then 1 else 0 end,
(1 - @defCapUp) * (p.Value - p.Premium),
@nextYear
from Products p
union
select
id,
case when p.Paydate <= getdate() then 1 else 0 end,
(1 + @defCapDown) * (p.Value + p.Payout),
@nextYear
from Products p
最大的问题是这样表达:在比较操作不同。我的问题是很难“整齐地”处理这些情况。如果有第三种情况比较是p.Paydate = getdate()例如呢?