0

我在 netezza 数据库表列中有如下数据:

    Slno    Ads    
    1       282542
    2       2492266
    3       2259286
    4       2072619
    5       1915098
    6       11567811
    7       10097
    8       5900
    9       2572
    10      18569

现在我需要编写一个计算的 sql 查询

    Slno 6 / Slno 1 i.e 11567811/282542
    Slno 7 / Slno 2 i.e 10097/2492266
    Slno 8 / Slno 3 i.e 5900/2259286
    Slno 9 / Slno 4 i.e 2572/2072619
    Slno 10/ Slno 5 i.e 18569/1915098

我将始终只有 10 行数据,并且数据集需要类似的划分。

计算值可以显示在 Ads 列旁边的新列中。

如果问题很清楚并且您需要任何信息,请告诉我。

谢谢

4

3 回答 3

1

您可以通过自加入来做到这一点:

select tnum.Ads / tdenom.Ads
from t tnum join
     t tdenom
     on tnum.slno = tdenom.slno + 5;

+5不仅匹配分子和分母行。它还会过滤掉其中的五行。例如,“4”永远不能是分子,因为没有行slno是-1。

于 2013-07-21T15:00:20.377 回答
1

不确定这是否是您想要做的全部,或者您是否没有告诉我们某些事情。

SELECT n.Slno
     , n.Ads
     , d.Slno
     , d.Ads
     , n.Ads/d.Ads
  FROM AdsTable n
 INNER JOIN AdsTable d
    ON d.Slno = n.Slno - 5
 WHERE n.Slno > 5
于 2013-07-21T15:03:25.203 回答
0

如果您没有序列号并且只有 Ads 列,那么您可以执行以下操作:

DECLARE @t AS TABLE (slno INT IDENTITY (1,1), Ads DECIMAL)

INSERT INTO @t(Ads)
SELECT Ads FROM AdsTable

SELECT A.Ads, A.Ads/B.Ads ComputedValue 
FROM @t A INNER JOIN @t B ON A.slno = B.slno + 5

这将是结果:

   Ads         ComputedValue
-----------------------------------
11567811    40.9419166000099100310
   10097    0.0040513332044011353
    5900    0.0026114445006077141
    2572    0.0012409420158746011
   18569    0.0096961095463521971
于 2013-07-21T17:14:16.223 回答