【发布时间】:2016-02-25 01:24:29
【问题描述】:
我有 3 列是使用复杂子字符串和替换函数计算的字符串列。
我有第四列,应该是 col1 + col2 + col3。
目前第 4 列正在重复计算 col1 和 col2 和 col3 所需的计算。
select 语句看起来像这样(我已经删除了大部分函数):
select
STR(c1, 2, 0) as col1,
STR(c2, 2, 0) as col2,
STR(c3, 2, 0) as col3,
STR(c1, 2, 0) + STR(c2, 2, 0) + STR(c3, 2, 0) as col4
from blah
问题是我们正在重复计算列的函数,破坏了 DRY 原则,并为错误的蔓延提供了机会。
如果我们能做这样的事情,我更愿意:
select
STR(c1, 2, 0) as col1,
STR(c2, 2, 0) as col2,
STR(c3, 2, 0) as col3,
col1 + col2 + col3 as col4
from blah
有没有一种巧妙的方法来做到这一点?我认为可以使用临时表来完成,但这似乎有点矫枉过正。
值得做吗,还是我只是认真对待 DRY。
【问题讨论】:
-
要么在嵌套查询中执行计算,要么使用 CTE 方法。
标签: sql sql-server select concatenation