【问题标题】:Interbase SQL remake a Select queryInterbase SQL 重做一个 Select 查询
【发布时间】:2017-05-02 01:10:42
【问题描述】:

我需要你的帮助。

我有一个 Interbase SQL Select 查询:

选择 aps.fullname, aps.productvcode, aps.alccode, aps.capacity, Cast(Round(Sum(当 wp.capacity>0 时的情况然后 wp.quantity * wp.capacity/10 否则 wp.quantity * wp.capacity end),4) as DECIMAL(18,4)) as WBTotal from AP aps left join Waybill_positions wp on wp.alccode=aps.alccode where wp.​​alccode='0001821000001389010' 按 aps.fullname 分组, aps.productvcode、aps.alccode、aps.capacity
联合所有
选择 aps.fullname、aps.productvcode、aps.alccode、aps.capacity、 Cast(Round(Sum(当 wp.capacity>0 然后 wp.quantity * wp.capacity/10 时的情况 否则 wp.quantity * wp.capacity end),4) as DECIMAL(18,4)) as WBTotal from AP aps left join Waybill_out_positions wp on wp.alccode=aps.alccode 其中 wp.alccode='0001821000001389010' 按 aps.fullname 分组, aps.productvcode, aps.alccode, aps.capacity

它给了我这个:

但我希望第二行中的值 "156,9750" 成为 "WBTOTAL" 右侧的单独列,并具有标题 "WBOTOTAL"

怎么做?

【问题讨论】:

    标签: sql select sum case interbase


    【解决方案1】:

    您可以使用 CTE,如下所示

    with CTE1 as
    (
        Select aps.fullname, aps.productvcode, aps.alccode, aps.capacity, Cast(Round(Sum(case when wp.capacity>0 then wp.quantity * wp.capacity/10 else wp.quantity * wp.capacity end),4) as DECIMAL(18,4)) as WBTotal from AP aps left join Waybill_positions wp on wp.alccode=aps.alccode where wp.alccode='0001821000001389010' group by aps.fullname, aps.productvcode, aps.alccode, aps.capacity
    ),
    CTE2 as
    (
        Select aps.fullname, aps.productvcode, aps.alccode, aps.capacity, Cast(Round(Sum(case when wp.capacity>0 then wp.quantity * wp.capacity/10 else wp.quantity * wp.capacity end),4) as DECIMAL(18,4)) as WBTotal from AP aps left join Waybill_out_positions wp on wp.alccode=aps.alccode where wp.alccode='0001821000001389010' group by aps.fullname, aps.productvcode, aps.alccode, aps.capacity
    )
    Select CTE1.fullname, CTE1.productvcode, CTE1.alccode, CTE1.capacity, CTE1.WBTotal, CTE2.WBTotal as WBOTOTAL
    From  CTE1 
    join  CTE2
    on CTE1.productvcode = CTE2.productvcode
    and CTE1.alccode = CTE2.alccode
    

    【讨论】:

    • 工作...谢谢..我可以以同样的方式添加其他表吗?
    • @SovereignSun,确保您可以在一个查询中拥有多个 CTE。您可以在此链接中获得更多参考msdn.microsoft.com/en-us/library/ms175972.aspx
    • 还有一个问题.. 如果我在 CTE2 中没有记录,我希望它如何显示 0,000?
    • @SovereignSun,使用左连接而不是连接。 Coalesce(CTE2.WBTotal, 0) as WBOTOTAL
    • 您不需要 SUM,只需 Coalesce(CTE2.WBOTOTAL,0)+Coalesce(CTE1.WBTOTAL, 0) 因为 TOTAL 应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多