【问题标题】:blank value istead in a mutiply subquery而是在乘法子查询中使用空白值
【发布时间】:2013-07-17 12:54:22
【问题描述】:

我在 Sybase 中有这个 SQL 来获取价格乘以 quetity 的累积值,但是当我希望它显示实际值时它给出了空白值。

这是我的代码:

    SELECT Pmu.IdVal, Pmu.IdInt, Pmu.IdNumEcrPpal, Pmu.IdSensOpe, Pmu.DtEcr, Pmu.QteEcr, Pmu.PrixAcquis,
    (SELECT SUM(p1.QteEcr)
            FROM   casimir.dbo.Pmu p1
            WHERE  p1.IdNumEcrPpal < Pmu.IdNumEcrPpal and p1.IdInt = Pmu.IdInt) AS QCP,
     (SELECT SUM(p2.QteEcr * p2.PrixAcquis) 
            FROM   casimir.dbo.Pmu p2
            WHERE  p2.IdNumEcrPpal < Pmu.IdNumEcrPpal and p2.IdInt = Pmu.IdInt) AS PRUP 

    FROM casimir.dbo.Pmu Pmu

    where IdInt = 1733

order by IdNumEcrPpal

结果如下:

IdVal * IdInt * IdNumEcrPpal *  QteEcr *    PrixAcquis *    QCP PRUP
650     1733    1074292               69    0.00         {null} {null}
650     1733    1165538               6     0.00            69  0.00
650     1733    1618644               7     0.00            75  0.00
650     1733    1934483               10    0.00            82  0.00
650     1733    1934484               1     0.00            92  0.00
650     1733    2140552               93    0.00            93  0.00
650     1733    2506329               200   0.00            186 0.00
650     1733    2515839               100   0.00            386 0.00
650     1733    2520087               110   0.00            486 0.00
650     1733    2572565               400   0.00            596 0.00
650     1733    2581126               1     0.00            996 0.00
650     1733    2858466               56    0.00            997 0.00
650     1733    2907483               6     0.00            1053 0.00
650     1733    3227255               7     0.00            1059 0.00
650     1733    3440560               173   0.00            1066 0.00
650     1733    3440727               67    0.00            1239 0.00
650     1733    3467592               100   0.00            1306 0.00
650     1733    3482135               100   188.00          1406 0.00
650     1733    3483475               30    185.35          1506    
650     1733    3491124               350   0.00            1536    
650     1733    3717502               70    0.00            1886    
650     1733    3717503               4     0.00            1956    
650     1733    4046744               20    65.44           1960    
650     1733    4047669               200   0.00            1980    
650     1733    4059311               150   67.12           2180    
650     1733    4101861               200   0.00            2330    
650     1733    4118371               36    0.00            2530    
650     1733    4118372               3     0.00            2566    

PRUP 列给了我正确的值,但之后给了空白值。

任何想法

【问题讨论】:

    标签: sql sybase cumulative-sum


    【解决方案1】:

    你需要使用ISNULL函数

    SELECT Pmu.IdVal, Pmu.IdInt, Pmu.IdNumEcrPpal, Pmu.IdSensOpe, Pmu.DtEcr, Pmu.QteEcr, Pmu.PrixAcquis,
    isnull((SELECT SUM(p1.QteEcr)
            FROM   casimir.dbo.Pmu p1
            WHERE  p1.IdNumEcrPpal < Pmu.IdNumEcrPpal and p1.IdInt = Pmu.IdInt),0) AS QCP,
     isnull((SELECT SUM(isnull(p2.QteEcr,1) * isnull(p2.PrixAcquis,1)) 
            FROM   casimir.dbo.Pmu p2
            WHERE  p2.IdNumEcrPpal < Pmu.IdNumEcrPpal and p2.IdInt = Pmu.IdInt),0) AS PRUP 
    FROM casimir.dbo.Pmu Pmu
    where IdInt = 1733
    order by IdNumEcrPpal
    

    您也可以改用coalesce 函数。

    【讨论】:

    • 谢谢@Parado,但我得到的空白值和以前一样
    • 谢谢,但结果还是一样:/
    • @user2583029 我不知道为什么它不起作用。你能告诉我们一些数据来计算你预期结果的第一行吗?
    【解决方案2】:

    我编辑了我的查询。也请参考链接http://sqlfiddle.com/#!2/c48ec/27

    SELECT Pmu.IdVal, Pmu.IdInt, Pmu.IdNumEcrPpal, Pmu.QteEcr, Pmu.PrixAcquis
       ,
        (SELECT SUM(p1.QteEcr)
                FROM   Pmu p1
                WHERE  p1.IdNumEcrPpal < Pmu.IdNumEcrPpal and p1.IdInt = Pmu.IdInt) AS QCP,
    
         coalesce ((SELECT SUM( coalesce (p2.QteEcr,0) *  coalesce (p2.PrixAcquis,0)) 
                FROM   Pmu p2
                WHERE  p2.IdNumEcrPpal < Pmu.IdNumEcrPpal and p2.IdInt = Pmu.IdInt),0) AS PRUP
    
     FROM Pmu Pmu
    
        where IdInt = 1733
    
    order by IdNumEcrPpal
    

    【讨论】:

    • 非常感谢,如果不接受 ifnull ,尝试了这个,但仍然有相同的结果:coalesce(p2.QteEcr,0) * coalesce(p2.PrixAcquis,0)
    • 你的 where 子句可能有问题。它对 PRUP 没有任何价值。尝试在您的选择子句中使用合并。我只是在修改我的 sql。
    • 我完全删除了 where 子句,但仍然是同样的问题:/
    • 你可以在 sqlfiddle.com 中放一个示例数据吗?
    • 我正在这样做,但不知道如何让您访问
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2021-10-08
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多