对复杂查询执行聚合功能

时间:2019-07-02 14:46:56

标签: sql sql-server aggregate aggregate-functions

我有一个查询,我正在尝试从oracle转换为SSMS。我敢肯定,你们大多数人都知道SSMS不允许子查询上的聚合,因此这带来了一个问题。我绝不是SQL专家,但我看到人们试图将其拆分并稍后在查询中写入聚合。我提供的摘录只是设置相同的大约20列或更多列中的一列。因此,我不知道我将求和和舍入函数放在哪里。

我已经尝试用case语句替换ISNULL(),但是我应该说这不是问题,也不是唯一的问题。我试图查看是否可以使查询不进行舍入而仅执行该总和,但是会弹出同样的“无法对包含聚集或子查询的表达式执行聚集函数”错误。

 SELECT
    ROUND(SUM(ISNULL([COLUMN_A1] - [COLUMN_A2],0)
    /(CASE WHEN [COLUMN_B1] = 400
    THEN 1
          ELSE ISNULL((SELECT [COLUMN_C1] FROM [TABLE_C] WHERE [COLUMN_C2] = 
    ISNULL([COLUMN_A3], [COLUMN_A4]) AND [COLUMN_C3] = [COLUMN_D1] AND [COLUMN_C4]= 400),
                   (SELECT [COLUMN_C1] FROM [TABLE_C] WHERE [COLUMN_C3] = [COLUMN_D1] AND [COLUMN_C4] =
                           400 AND [COLUMN_C2] =
                                   (SELECT MAX([COLUMN_C2]) FROM [TABLE_C] WHERE [COLUMN_C3] = [COLUMN_D1] AND [COLUMN_C4] = 400 AND [COLUMN_C2] <= ISNULL([COLUMN_A3],[COLUMN_A4])))) END)),2) AS [COMPLICATED_QUERY_COLUMN],


                                   FROM [TABLE_D]
INNER JOIN [TABLE_A] ON [COLUMN_A] = [COLUMN_D]
LEFT OUTER JOIN [TABLE_E] ON [COLUMN_E] = [COLUMN_A]
LEFT OUTER JOIN [TABLE_F] ON [COLUMN_F] = [COLUMN_E]
WHERE 1 = 1
AND [COLUMN_D2] = 1
GROUP BY [COLUMN_D],[COLUMN_D3]
HAVING SUM ([COLUMN_A5]-[COLUMN_A2])<>0

这是一个动态视图,因此输出在不断变化。对于货币类型的结果,它应该只是子查询的总和四舍五入到小数点后两位。

0 个答案:

没有答案