如何在 Sql Server 中使用动态生成的字段进行添加?

Posted

技术标签:

【中文标题】如何在 Sql Server 中使用动态生成的字段进行添加?【英文标题】:how to do addition In Sql Server using dynamic generated field? 【发布时间】:2017-07-05 13:33:40 【问题描述】:

我有一张名为“购物车”的桌子。字段是:

CartId ClientId ProductId Qty

现在我将与ProductMaster 加入此表以获得ProductNameProuctPrice

select cc.CartId,cc.ProductId,pm.ProductName,cc.Qty,
        (pm.ProductPrice * cc.Qty) As SubTotal 
from ClientCart as cc 
    inner join ProductMaster as pm on cc.ProductId = pm.ProductId 

现在我想使用动态字段SubTotal 生成GrandTotal。我该怎么做?

【问题讨论】:

移除无关的mysql标签 添加一些示例表数据和预期结果。 (作为格式化文本。) 【参考方案1】:
with CTE as
(
select cc.CartId,cc.ProductId,pm.ProductName,cc.Qty,
        (pm.ProductPrice * cc.Qty) As SubTotal 
from ClientCart as cc 
    inner join ProductMaster as pm on cc.ProductId = pm.ProductId 
where cc.ClientId = @id
)
select *
from CTE
union
select null,null, null,null, sum(SubTotal) -- this is a grand total of all sub totals
from CTE

这不是正确的 Rollup 方法,但你的也不是,所以这可以正常工作

【讨论】:

这不会生成单独的总计字段。! @DevKriya 编辑您的问题以更好地解释。此外,SQL 有列,即使在结果中也是如此。字段不是 SQL 对象,因此解释为一行【参考方案2】:

试试这个:

select subtable.CartId, sum(subtable.SubTotal)
from (
select cc.CartId,cc.ProductId,pm.ProductName,cc.Qty,
        (pm.ProductPrice * cc.Qty) As SubTotal 
from ClientCart as cc 
inner join ProductMaster as pm on cc.ProductId = pm.ProductId 
where cc.ClientId = @id ) subtable
group by subtable.CartId;

【讨论】:

以上是关于如何在 Sql Server 中使用动态生成的字段进行添加?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中动态字段的转换

sql server存储过程如何动态生成表名

SQL Server中动态列转行

sql server 2005中如何修改字段名

如何从临时表中检索字段名称 (SQL Server 2008)

SQL Server - 你可以在 CREATE TABLE 中添加字段描述吗?