1

我有一个包含 3 个文本列的表格,我想在上面进行一些数学计算。表如下所示:

Date        Column1    Column2    Column3
-----------------------------------------
2012-08-01  STABLE     NEG        STABLE
2012-08-02  NEG        NEG        STABLE
2012-08-03  STABLE     STABLE     STABLE

想要我想要实现的是

  • 如果 2/3 列等于“STABLE”,则返回 66%,即 2/3,因为它在第一行中
  • 如果 1/3 列等于“STABLE”,则返回 33%,即 1/3,因为它在第二行中
  • 如果 3/3 列等于“STABLE”,则返回 100%,即 3/3,因为它位于第三行

我想知道如何使用 SQL 来实现这一点?我目前正在研究 MSSQL Server 2008 R2。

我希望我的问题足够清楚。

4

2 回答 2

3

那么,像这样的事情?

select 
   ((case when col1 = 'Stable' then 1.0 else 0.0 end) + 
   (case when col2 = 'Stable' then 1.0 else 0.0 end) + 
   (case when col3 = 'Stable' then 1.0 else 0.0 end)) / 3.0
from yourtable

您可以对输出进行一些格式化,但应该非常接近您要查找的内容。

于 2012-08-10T00:31:00.900 回答
0

如果这些是列值的唯一选择:

select ( Len( Column1 ) + Len( Column2 ) + Len( Column3 ) - 9 ) / 3 / 3.0 * 100.0 as 'Percent'
  from Foo

优化器应该处理常量折叠。为了清楚起见,它们被显示出来。

神曲为编写这样的代码的人描述了一个地方。

于 2012-08-10T04:05:56.520 回答