我的查询类似于以下内容:
SELECT CASE WHEN (GROUPING(Name) = 1) THEN 'All' ELSE Name END AS Name,
CASE WHEN (GROUPING(Type) = 1) THEN 'All' ELSE Type END AS Type,
sum(quantity) AS [Quantity],
CAST(sum(quantity) * (SELECT QuantityMultiplier FROM QuantityMultipliers WHERE a = t.b) AS DECIMAL(18,2)) AS Multiplied Quantity
FROM @Table t
GROUP BY Name, Type WITH ROLLUP
我正在尝试返回名称,类型,总计数量和总计数量乘以任意数字的列表。到目前为止都很好。我还需要为每个Name和每个Type返回一个小计的总行,例如以下
Name Type Quantity Multiplied Quantity
------- --------- ----------- -------------------
a 1 2 4
a 2 3 3
a ALL 5 7
b 1 6 12
b 2 1 1
b ALL 7 13
ALL ALL 24 40
前3列很好。虽然我在累加行中获得了乘以数量的空值。我认为这种情况发生的唯一原因是因为SQL不能将最后一列识别为聚合,因为我将它乘以某种东西。
我可以以某种方式解决这个问题而不会让事情变得太复杂吗?
如果无法做到这一点,我会回到临时桌上。
答案 0 :(得分:1)
在获取乘数的子查询中,您有WHERE a=b
。主查询中的表格中是a
还是b
?
如果这些值是静态的(与主查询无关),它看起来应该没问题......
如果a
或b
值为name
或type
字段,则汇总记录可以为NULL
。如果是这样,您可以更改为类似于...的内容。
CAST(sum(quantity * (<multiplie_query>)) AS DECIMAL(18,2))
。
如果a
或b
是您的主要查询中的其他字段,那么您将获得多条记录,而不仅仅是一个乘数。你可以改成像......
CAST(sum(quantity) * (SELECT MAX(multiplier) FROM ...)) AS DECIMAL(18,2))