【发布时间】:2015-11-17 09:14:15
【问题描述】:
我在查询中使用多个选择语句和案例来获取结果。请查看我正在尝试解决的查询。但它给了我一个聚合函数的错误。我想做的是,我有 3 个预算标准,结果应该是这样的。它们是:
Budget 2015
Budget Jan-july2015
Budget July-dec2015
在第一个字段中,我将获得整个 2015 年的预算,在第二个字段中,我希望将来自 july-dec2015 的预算费用作为“当前预算”,在第三个字段中,jan-july2015 和 july-dec2015 的预算应添加为“累积”费用”。
SELECT CASE WHEN T1.[AcctName] LIKE '%Salaries%' THEN 'Salaries'
WHEN T1.[AcctName] LIKE '%Travel%' THEN 'Travel'
WHEN T1.[AcctName] LIKE '%Supplies%' THEN 'Supplies'
WHEN T1.[AcctName] LIKE '%Consultants%' THEN 'Consultants'
WHEN T1.[AcctName] LIKE '%Patient%' THEN 'Patient Care'
WHEN T1.[AcctName] LIKE '%Equipment%' THEN 'Equipments'
WHEN T1.[AcctName] LIKE '%Expense%' THEN 'Other Expenses'
WHEN T1.[AcctName] LIKE '%Alteration%' THEN 'Alterations/Renovations' ELSE 'Alterations/Renovations' END,
SUM(T0.[DebLTotal]/85) AS buget , (Select sum(T0.[CrdRLTotal]/85) where T2.[Name] = 'July-Dec2015' ) as 'CurrentBudget',
(select sum(T0.[CrdRLTotal]/85) + 'CurrentBudget' where T2.[Name] = 'jan-july2015') as 'Cummulative'
FROM OBGT
T0 INNER JOIN OACT T1 ON T0.[AcctCode] = T1.[AcctCode] INNER JOIN OBGS T2 ON T0.[Instance] = T2.[AbsId] where T2.[Name] = 'Main Budget 2015'
GROUP BY CASE WHEN T1.[AcctName] LIKE '%Salaries%' THEN 'Salaries'
WHEN T1.[AcctName] LIKE '%Travel%' THEN 'Travel'
WHEN T1.[AcctName] LIKE '%Supplies%' THEN 'Supplies'
WHEN T1.[AcctName] LIKE '%Consultants%' THEN 'Consultants'
WHEN T1.[AcctName] LIKE '%Patient%' THEN 'Patient Care'
WHEN T1.[AcctName] LIKE '%Equipment%' THEN 'Equipments'
WHEN T1.[AcctName] LIKE '%Expense%' THEN 'Other Expenses'
WHEN T1.[AcctName] LIKE '%Alteration%' THEN 'Alterations/Renovations' ELSE 'Alterations/Renovations' END
我不知道如何获取所有必需的字段。
【问题讨论】:
-
使用派生表或 cte 来简化代码。 (即避免两次编写那个巨大的 CASE。)
-
你说你得到一个错误,那是什么错误?
-
@jarlh 你能帮我从这个查询中获得所需的结果吗,或者你有另一个查询来获得所需的结果
-
@TZHX 列 'OBGS.Name' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
-
您有明确的错误消息 - 您能否将查询更改为“将 OBGS.Name 包含到聚合函数或 GROUP BY 子句中”?
标签: sql sql-server-2012