嵌套聚合

时间:2015-07-08 16:35:58

标签: sql sql-server nested aggregate

我有两张表lt_wmi_men_org_cslt_wmi_men_venue_cs

我想要做的是在场地表中计算存在多少行(对于给定的季节和类型)然后乘以sessions字段并直接更新到org表(或将临时变量用于更新组织字段)。

这很有效。

declare @sum_wksp int = (select count(e.id_key) 
                         from LT_WMI_MEN_VENUE_CS e 
                         join lt_wmi_men_org_cs f on e.organization = f.customer_no
                         where e.season = f.season
                           and e.[type] = 1)

然而,当我添加会话的乘法时,它不起作用。

declare @sum_wksp int = (select (count(e.id_key)    * e.sessions) as 'val'
                         from LT_WMI_MEN_VENUE_CS e 
                         join lt_wmi_men_org_cs f on e.organization = f.customer_no
                         where e.season = f.season
                           and e.[type] = 1
                           and f.id_key = @id_key)

我的数据看起来像这样

venue

season    type    sessions    organization
2016         1        4          46
2015         2        2          51
2011         1        3          21
2015         2        5          73
2016         1        2          46

orgs

season    sum_type    customer_no
2016         NULL        46
2015         NULL        21
2011         NULL        73
2015         NULL        51
2016         NULL        29

因此,如果季节为@sum_wksp并且总共等于= 6,则2016 (1 * 4) + (1 * 2)应该是底线。

这是一个两部分问题 - 如何修复查询以使其正常工作?

是否有更有效的更新方式

有没有办法直接更新lt_wmi_men_org_cs而不使用临时变量?

update lt_wmi_men_org_cs 
set wksp_sum = <query>

而不是

update lt_wmi_men_org_cs 
set wksp_sum = @sum_wksp

0 个答案:

没有答案