Sql server sum(distinct)的替代方案是什么?

Sql server sum(distinct)的替代方案是什么?,sql-server,Sql Server,我有一个查询,它返回使用多个联接的列的sum()。问题是这些值在每次连接时都会相乘 示例代码: select c.Categories, sum(os.OpeningStock), sum(cs.[ClosingStock]) from #categories c join #openingstocks os on c.Categories = os.Categories join #closingstocks cs on c.categories=cs.Categories group b

我有一个查询,它返回使用多个联接的列的sum()。问题是这些值在每次连接时都会相乘

示例代码:

select c.Categories, sum(os.OpeningStock), sum(cs.[ClosingStock]) 
from #categories c 
join #openingstocks os on c.Categories = os.Categories
join #closingstocks cs on c.categories=cs.Categories
group by rollup(c.Categories)
因为我使用了两个连接,所以这里的值会相乘两次

我使用的是sum(distinct),它给出了正确的答案,但是有其他解决方案吗?

sum(distinct)
如果任何行恰好有相同的开盘或收盘股票,它将返回错误的结果

你可以用

WITH os
     AS (SELECT Categories,
                SUM(os.OpeningStock) AS OpeningStock
         FROM   #openingstocks
         GROUP  BY Categories),
     cs
     AS (SELECT Categories,
                SUM(os.[ClosingStock]) AS [ClosingStock]
         FROM   #closingstocks
         GROUP  BY Categories)
SELECT c.Categories,
       SUM(os.OpeningStock),
       SUM(cs.[ClosingStock])
FROM   #categories c
       JOIN os
         ON c.Categories = os.Categories
       JOIN cs
         ON c.categories = cs.Categories
GROUP  BY rollup( c.Categories ) 
SUM(DISTINCT)
如果任何行恰好具有相同的期初库存或期末库存,将返回错误的结果

你可以用

WITH os
     AS (SELECT Categories,
                SUM(os.OpeningStock) AS OpeningStock
         FROM   #openingstocks
         GROUP  BY Categories),
     cs
     AS (SELECT Categories,
                SUM(os.[ClosingStock]) AS [ClosingStock]
         FROM   #closingstocks
         GROUP  BY Categories)
SELECT c.Categories,
       SUM(os.OpeningStock),
       SUM(cs.[ClosingStock])
FROM   #categories c
       JOIN os
         ON c.Categories = os.Categories
       JOIN cs
         ON c.categories = cs.Categories
GROUP  BY rollup( c.Categories ) 

如果不了解您的数据模型,我们很难给您一个答案。你到底在总结什么,为什么一个连接会重复这个总和?在这里使用
sum(distict col)
肯定是错误的-如果碰巧一个列有两个相等的值,你只需要其中的一个。@SchmitzIT-如果一个类别有多行,那么它们就会得到重复的结果。因为行将被联接相乘。如果它们有多行,肯定会有多个值。如何确定哪一个是正确的单一值?如果不了解您的数据模型,我们很难给您一个答案。你到底在总结什么,为什么一个连接会重复这个总和?在这里使用
sum(distict col)
肯定是错误的-如果碰巧一个列有两个相等的值,你只需要其中的一个。@SchmitzIT-如果一个类别有多行,那么它们就会得到重复的结果。因为行将被联接相乘。如果它们有多行,肯定会有多个值。如何确定哪一个是正确的单一值?这里有点不对劲