在SQL SERVER上分组,避免使用联接表中的字段进行聚合

在SQL SERVER上分组,避免使用联接表中的字段进行聚合,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两张桌子: 一个是呼叫日志列表表1,另一个是代理预测数量列表表2 SELECT datepart(ISOWK, convert(datetime, row_date, 102)) as week, MAX(avg_positioned_staff) as aps, (fcst01 + fcst02 + fcst03 + fcst04 + fcst05 + fcst06 + fcst07 + fcst08 + fcst09 + fcst10 + fcst11 + fc

我有两张桌子: 一个是呼叫日志列表
表1
,另一个是代理预测数量列表
表2

SELECT 
    datepart(ISOWK, convert(datetime, row_date, 102)) as week,
    MAX(avg_positioned_staff) as aps,
    (fcst01 + fcst02 + fcst03 + fcst04 + fcst05 + fcst06 + fcst07 + fcst08 + fcst09 + fcst10 + fcst11 + fcst12 + fcst13 + fcst14 + fcst15 + fcst16 + fcst17 + fcst18 + fcst19 + fcst20 + fcst21 + fcst22 + fcst23 + fcst24 + fcst25 + fcst26 + fcst27 + fcst28 + fcst29 + fcst30 + fcst31 + fcst32 + fcst33 + fcst34 + fcst35 + fcst36 + fcst37 + fcst38 + fcst39 + fcst40 + fcst41 + fcst42 + fcst43 + fcst44 + fcst45 + fcst46 + fcst47 + fcst48 + fcst49 + fcst50 + fcst51 + cst52 + fcst53 + fcst54 + fcst55 + fcst56 + fcst57 + fcst58 + fcst59 + fcst60 + fcst61 + fcst62 + fcst63 + fcst64 + fcst65 + fcst66) as sfcst,
    SUM(acd_calls) + SUM(aban_calls) as snco,
    SUM(acd_calls) as snch, 
    SUM(acd_calls_60secs) as nchwsl, 
    SUM(aban_calls) as snca,
    SUM(acd_calls) as sans, 
    SUM(aban_calls) as saban,
    SUM(tsa) as sasa,
    SUM(acd_calls) as sacd,
    MAX(max_delay) as mdly,
    SUM(acd_time) as satt,
    SUM(hold_time) as saoht,
    SUM(held_calls) as sheld,
    SUM(acw_time) as sacw,
    SUM(handling_time) saht,
    SUM(acd_calls_60secs) as ssl,
    (SUM(acd_calls) + SUM(aban_calls)) as sAnsAbanSl,
    SUM(handling_time) as socc,
    SUM(avail_time) as savailtym,
    SUM(staffed_time) as sstaffdtym,
    fcst01, fcst02, fcst03, fcst04, fcst05, fcst06, fcst07, fcst08, fcst09, fcst10, fcst11, fcst12, fcst13, fcst14, fcst15, fcst16, fcst17, fcst18, fcst19, fcst20, fcst21, fcst22, fcst23, fcst24, fcst25, fcst26, fcst27, fcst28, fcst29, fcst30, fcst31, fcst32, fcst33, fcst34, fcst35, fcst36, fcst37, fcst38, fcst39, fcst40, fcst41, fcst42, fcst43, fcst44, fcst45, fcst46, fcst47, fcst48, fcst49, fcst50, fcst51, fcst52, fcst53, fcst54, fcst55, fcst56, fcst57, fcst58, fcst59, fcst60, fcst61, fcst62, fcst63, fcst64, fcst65, fcst66

FROM table1
LEFT JOIN table2
    on table1.row_date = table2.date 

GROUP BY
    datepart(ISOWK, convert(datetime, row_date, 102)),
    fcst01, fcst02, fcst03, fcst04, fcst05, fcst06, fcst07, fcst08, fcst09, fcst10, fcst11, fcst12, fcst13, fcst14, fcst15, fcst16, fcst17, fcst18, fcst19, fcst20, fcst21, fcst22, fcst23, fcst24, fcst25, fcst26, fcst27, fcst28, fcst29, fcst30, fcst31, fcst32, fcst33, fcst34, fcst35, fcst36, fcst37, fcst38, fcst39, fcst40, fcst41, fcst42, fcst43, fcst44, fcst45, fcst46, fcst47, fcst48, fcst49, fcst50, fcst51, fcst52, fcst53, fcst54, fcst55, fcst56, fcst57, fcst58, fcst59, fcst60, fcst61, fcst62, fcst63, fcst64, fcst65, fcst66

ORDER BY
    datepart(ISOWK, convert(datetime, row_date, 102))
正如您首先注意到的,我有一长串的
fcst
,因为: 表1由系统自动生成 表2由用户输入,表2的表结构为

| Date | fsct01 | fcst02 ........... fcst0N | -------------------------------------------------- | date | int | int ............. int | 我想按
对其进行分组,但似乎
fsct
把它搞砸了,因为它需要包括在分组中

我希望它是

week aps sfcst ... 27 sum(aps) [sum of all fcst within the week] ... 28 sum(aps) [sum of all fcst within the week] ... 29 sum(aps) [sum of all fcst within the week] ... 30 sum(aps) [sum of all fcst within the week] ... 星期一。。。 27总和(aps)[一周内所有fcst的总和]。。。 28总和(aps)[一周内所有fcst的总和]。。。 29总和(aps)[一周内所有fcst的总和]。。。 30总和(aps)[一周内所有fcst的总和]。。。 希望我说的有道理,
可能的解决办法是什么

对不起,你的问题不是很清楚。请浏览下面的链接并重新发布:

为了给你一些思考的食物,你可以研究以下选项:

  • 支点

  • 终于找到了正确的逻辑。只需将表2分组并将其与表1.week=表2.week上的表1连接即可

    代码如下:

    SELECT 
        datepart(ISOWK, convert(datetime, row_date, 102)) as week,
        MAX(avg_positioned_staff) as aps,
        (sfcst01+ sfcst02+ sfcst03+ sfcst04+ sfcst05+ sfcst06+ sfcst07+ sfcst08+ sfcst09+ sfcst10+ sfcst11+ sfcst12+ sfcst13+ sfcst14+ sfcst15+ sfcst16+ sfcst17+ sfcst18+ sfcst19+ sfcst20+ sfcst21+ sfcst22+ sfcst23+ sfcst24+ sfcst25+ sfcst26+ sfcst27+ sfcst28+ sfcst29+ sfcst30+ sfcst31+ sfcst32+ sfcst33+ sfcst34+ sfcst35+ sfcst36+ sfcst37+ sfcst38+ sfcst39+ sfcst40+ sfcst41+ sfcst42+ sfcst43+ sfcst44+ sfcst45+ sfcst46+ sfcst47+ sfcst48+ sfcst49+ sfcst50+ sfcst51+ sfcst52+ sfcst53+ sfcst54+ sfcst55+ sfcst56+ sfcst57+ sfcst58+ sfcst59+ sfcst60+ sfcst61+ sfcst62+ sfcst63+ sfcst64+ sfcst65+ sfcst66) as sfcst,
        SUM(acd_calls)+SUM(aban_calls) as snco,
        SUM(acd_calls) as snch,
        SUM(acd_calls_60secs) as nchwsl,
        SUM(aban_calls) as snca,
        SUM(acd_calls) as sans,
        SUM(aban_calls) as saban,
        SUM(tsa) as sasa,
        SUM(acd_calls) as sacd,
        MAX(max_delay) as mdly,
        SUM(acd_time) as satt,
        SUM(hold_time) as saoht,
        SUM(held_calls) as sheld,
        SUM(acw_time) as sacw,
        SUM(handling_time) saht,
        SUM(acd_calls_60secs) as ssl,
        (SUM(acd_calls)+SUM(aban_calls)) as sAnsAbanSl,
        SUM(handling_time) as socc,
        SUM(avail_time) as savailtym,
        SUM(staffed_time) as sstaffdtym
        FROM [AA].[dbo].[history] 
        left join
        ( select datepart(ISOWK, convert(datetime, date, 102) ) as week2, sum(fcst01) as sfcst01 , sum(fcst02) as sfcst02 , sum(fcst03) as sfcst03 , sum(fcst04) as sfcst04 , sum(fcst05) as sfcst05 , sum(fcst06) as sfcst06 , sum(fcst07) as sfcst07 , sum(fcst08) as sfcst08 , sum(fcst09) as sfcst09 , sum(fcst10) as sfcst10 , sum(fcst11) as sfcst11 , sum(fcst12) as sfcst12 , sum(fcst13) as sfcst13 , sum(fcst14) as sfcst14 , sum(fcst15) as sfcst15 , sum(fcst16) as sfcst16 , sum(fcst17) as sfcst17 , sum(fcst18) as sfcst18 , sum(fcst19) as sfcst19 , sum(fcst20) as sfcst20 , sum(fcst21) as sfcst21 , sum(fcst22) as sfcst22 , sum(fcst23) as sfcst23 , sum(fcst24) as sfcst24 , sum(fcst25) as sfcst25 , sum(fcst26) as sfcst26 , sum(fcst27) as sfcst27 , sum(fcst28) as sfcst28 , sum(fcst29) as sfcst29 , sum(fcst30) as sfcst30 , sum(fcst31) as sfcst31 , sum(fcst32) as sfcst32 , sum(fcst33) as sfcst33 , sum(fcst34) as sfcst34 , sum(fcst35) as sfcst35 , sum(fcst36) as sfcst36 , sum(fcst37) as sfcst37 , sum(fcst38) as sfcst38 , sum(fcst39) as sfcst39 , sum(fcst40) as sfcst40 , sum(fcst41) as sfcst41 , sum(fcst42) as sfcst42 , sum(fcst43) as sfcst43 , sum(fcst44) as sfcst44 , sum(fcst45) as sfcst45 , sum(fcst46) as sfcst46 , sum(fcst47) as sfcst47 , sum(fcst48) as sfcst48 , sum(fcst49) as sfcst49 , sum(fcst50) as sfcst50 , sum(fcst51) as sfcst51 , sum(fcst52) as sfcst52 , sum(fcst53) as sfcst53 , sum(fcst54) as sfcst54 , sum(fcst55) as sfcst55 , sum(fcst56) as sfcst56 , sum(fcst57) as sfcst57 , sum(fcst58) as sfcst58 , sum(fcst59) as sfcst59 , sum(fcst60) as sfcst60 , sum(fcst61) as sfcst61 , sum(fcst62) as sfcst62 , sum(fcst63) as sfcst63 , sum(fcst64) as sfcst64 , sum(fcst65) as sfcst65 , sum(fcst66) as sfcst66 from [AA].[dbo].[forcast] group by datepart(ISOWK, convert(datetime, date, 102) )  ) t2
        on datepart(ISOWK, convert(datetime, row_date, 102)) = t2.week2  
        where split = 451 and time != ' 6:45AM -  7:00AM' 
        group by datepart(ISOWK,  convert(datetime, row_date, 102)),sfcst01, sfcst02, sfcst03, sfcst04, sfcst05, sfcst06, sfcst07, sfcst08, sfcst09, sfcst10, sfcst11, sfcst12, sfcst13, sfcst14, sfcst15, sfcst16, sfcst17, sfcst18, sfcst19, sfcst20, sfcst21, sfcst22, sfcst23, sfcst24, sfcst25, sfcst26, sfcst27, sfcst28, sfcst29, sfcst30, sfcst31, sfcst32, sfcst33, sfcst34, sfcst35, sfcst36, sfcst37, sfcst38, sfcst39, sfcst40, sfcst41, sfcst42, sfcst43, sfcst44, sfcst45, sfcst46, sfcst47, sfcst48, sfcst49, sfcst50, sfcst51, sfcst52, sfcst53, sfcst54, sfcst55, sfcst56, sfcst57, sfcst58, sfcst59, sfcst60, sfcst61, sfcst62, sfcst63, sfcst64, sfcst65, sfcst66
        order by datepart(ISOWK,  convert(datetime, row_date, 102))
    
    干杯

    SELECT 
        datepart(ISOWK, convert(datetime, row_date, 102)) as week,
        MAX(avg_positioned_staff) as aps,
        (sfcst01+ sfcst02+ sfcst03+ sfcst04+ sfcst05+ sfcst06+ sfcst07+ sfcst08+ sfcst09+ sfcst10+ sfcst11+ sfcst12+ sfcst13+ sfcst14+ sfcst15+ sfcst16+ sfcst17+ sfcst18+ sfcst19+ sfcst20+ sfcst21+ sfcst22+ sfcst23+ sfcst24+ sfcst25+ sfcst26+ sfcst27+ sfcst28+ sfcst29+ sfcst30+ sfcst31+ sfcst32+ sfcst33+ sfcst34+ sfcst35+ sfcst36+ sfcst37+ sfcst38+ sfcst39+ sfcst40+ sfcst41+ sfcst42+ sfcst43+ sfcst44+ sfcst45+ sfcst46+ sfcst47+ sfcst48+ sfcst49+ sfcst50+ sfcst51+ sfcst52+ sfcst53+ sfcst54+ sfcst55+ sfcst56+ sfcst57+ sfcst58+ sfcst59+ sfcst60+ sfcst61+ sfcst62+ sfcst63+ sfcst64+ sfcst65+ sfcst66) as sfcst,
        SUM(acd_calls)+SUM(aban_calls) as snco,
        SUM(acd_calls) as snch,
        SUM(acd_calls_60secs) as nchwsl,
        SUM(aban_calls) as snca,
        SUM(acd_calls) as sans,
        SUM(aban_calls) as saban,
        SUM(tsa) as sasa,
        SUM(acd_calls) as sacd,
        MAX(max_delay) as mdly,
        SUM(acd_time) as satt,
        SUM(hold_time) as saoht,
        SUM(held_calls) as sheld,
        SUM(acw_time) as sacw,
        SUM(handling_time) saht,
        SUM(acd_calls_60secs) as ssl,
        (SUM(acd_calls)+SUM(aban_calls)) as sAnsAbanSl,
        SUM(handling_time) as socc,
        SUM(avail_time) as savailtym,
        SUM(staffed_time) as sstaffdtym
        FROM [AA].[dbo].[history] 
        left join
        ( select datepart(ISOWK, convert(datetime, date, 102) ) as week2, sum(fcst01) as sfcst01 , sum(fcst02) as sfcst02 , sum(fcst03) as sfcst03 , sum(fcst04) as sfcst04 , sum(fcst05) as sfcst05 , sum(fcst06) as sfcst06 , sum(fcst07) as sfcst07 , sum(fcst08) as sfcst08 , sum(fcst09) as sfcst09 , sum(fcst10) as sfcst10 , sum(fcst11) as sfcst11 , sum(fcst12) as sfcst12 , sum(fcst13) as sfcst13 , sum(fcst14) as sfcst14 , sum(fcst15) as sfcst15 , sum(fcst16) as sfcst16 , sum(fcst17) as sfcst17 , sum(fcst18) as sfcst18 , sum(fcst19) as sfcst19 , sum(fcst20) as sfcst20 , sum(fcst21) as sfcst21 , sum(fcst22) as sfcst22 , sum(fcst23) as sfcst23 , sum(fcst24) as sfcst24 , sum(fcst25) as sfcst25 , sum(fcst26) as sfcst26 , sum(fcst27) as sfcst27 , sum(fcst28) as sfcst28 , sum(fcst29) as sfcst29 , sum(fcst30) as sfcst30 , sum(fcst31) as sfcst31 , sum(fcst32) as sfcst32 , sum(fcst33) as sfcst33 , sum(fcst34) as sfcst34 , sum(fcst35) as sfcst35 , sum(fcst36) as sfcst36 , sum(fcst37) as sfcst37 , sum(fcst38) as sfcst38 , sum(fcst39) as sfcst39 , sum(fcst40) as sfcst40 , sum(fcst41) as sfcst41 , sum(fcst42) as sfcst42 , sum(fcst43) as sfcst43 , sum(fcst44) as sfcst44 , sum(fcst45) as sfcst45 , sum(fcst46) as sfcst46 , sum(fcst47) as sfcst47 , sum(fcst48) as sfcst48 , sum(fcst49) as sfcst49 , sum(fcst50) as sfcst50 , sum(fcst51) as sfcst51 , sum(fcst52) as sfcst52 , sum(fcst53) as sfcst53 , sum(fcst54) as sfcst54 , sum(fcst55) as sfcst55 , sum(fcst56) as sfcst56 , sum(fcst57) as sfcst57 , sum(fcst58) as sfcst58 , sum(fcst59) as sfcst59 , sum(fcst60) as sfcst60 , sum(fcst61) as sfcst61 , sum(fcst62) as sfcst62 , sum(fcst63) as sfcst63 , sum(fcst64) as sfcst64 , sum(fcst65) as sfcst65 , sum(fcst66) as sfcst66 from [AA].[dbo].[forcast] group by datepart(ISOWK, convert(datetime, date, 102) )  ) t2
        on datepart(ISOWK, convert(datetime, row_date, 102)) = t2.week2  
        where split = 451 and time != ' 6:45AM -  7:00AM' 
        group by datepart(ISOWK,  convert(datetime, row_date, 102)),sfcst01, sfcst02, sfcst03, sfcst04, sfcst05, sfcst06, sfcst07, sfcst08, sfcst09, sfcst10, sfcst11, sfcst12, sfcst13, sfcst14, sfcst15, sfcst16, sfcst17, sfcst18, sfcst19, sfcst20, sfcst21, sfcst22, sfcst23, sfcst24, sfcst25, sfcst26, sfcst27, sfcst28, sfcst29, sfcst30, sfcst31, sfcst32, sfcst33, sfcst34, sfcst35, sfcst36, sfcst37, sfcst38, sfcst39, sfcst40, sfcst41, sfcst42, sfcst43, sfcst44, sfcst45, sfcst46, sfcst47, sfcst48, sfcst49, sfcst50, sfcst51, sfcst52, sfcst53, sfcst54, sfcst55, sfcst56, sfcst57, sfcst58, sfcst59, sfcst60, sfcst61, sfcst62, sfcst63, sfcst64, sfcst65, sfcst66
        order by datepart(ISOWK,  convert(datetime, row_date, 102))