【问题标题】:How to add results of previous columns (SQL)如何添加先前列的结果 (SQL)
【发布时间】:2022-01-03 07:17:37
【问题描述】:

我不确定在 SQL 中是否可能,将不胜感激。

我创建了 4 个案例语句来定义已售商品的数量(特定类型)。 之后,我想创建另一个第 5 列,我可以在其中获取总销售额并减去所有这 4 种特定类型。 我试图了解如何在一个 SQL 查询中完成它。 SUM 和除法应该在行级别上完成。

换句话说,试图了解我如何对 4 个案例语句求和,然后将该总和与另一列相除,所有这些都应该在一个列中。

我希望我的解释是有道理的。 p/s 我专门使用 SQL SSMS。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您只提供了一个查询片段,因此答案只是一个查询片段。

    您不能引用在同一级别中创建的列别名,但是您可以将查询创建为派生表CTE,并且那么这些列可用于外部查询,因此

    with t as (
        select
            p.PDQSLD,
            p.[PDITM#] as [Item Number],
            Sum(PDQSLD) as [Quantity Sold], 
            p.PDWEDT as [Week Ending Date],
            l.SGDWHS as [Default Ship Warehouse], 
            p.PDCHN as [Chain Code],
            case when p.PDCHN = 'DH' then p.PDQSLD else 0 end as DHSLD,
            case when p.PDCHN = 'WM' then p.PDQSLD else 0 end as WMSLD,
            case when p.PDCHN = 'MJ' then p.PDQSLD else 0 end as MJSLD,
            case when p.PDCHN = 'BJ' then p.PDQSLD else 0 end as BJSLD
        from ...
    )
    select t.*,
    PDQSLD - ( DHSLD + WMSLD +  MJSLD + BJSLD ) as OTHRSLD
    from t
    

    请注意,在 T-SQL 中,'quoted' 值用于字符串文字,如果需要分隔列别名,请使用 [方括号]。

    【讨论】:

    • 感谢您的回复。从 CTE 中选择我仍然有一些问题。我在消息中提供了查询。你能告诉我我哪里出错了吗?我现在确实收到一个错误“关键字'from'附近的语法不正确。”
    • @Davidskis 你的 case 表达是荒谬的,case when.. 那么 什么?你甚至需要一个案例表达吗?我不知道你的意图是什么。
    • 我已在原始查询中发布了所有内容。我不需要其他任何东西。你说我只提供了查询的一部分,所以我发布了所有内容。
    • @Davidskis 您的原始查询有一个部分形成的 case 表达式,它本身是不完整的。您只是希望新的派生列是这些的总和吗?你的问题非常不完整。 case when <expression> end 是语法错误。
    • 我认为你是对的。我很抱歉。我只需要一个计算 p.[PDQSLD] - ( DHSLD + WMSLD + MJSLD + BJSLD ) 我真的不需要 CASE。你能告诉我我需要如何选择它们(从那个临时表或 CTE 中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2014-05-24
    相关资源
    最近更新 更多