首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在一个结果中合并两行,但不合并所有结果?

如何在一个结果中合并两行,但不合并所有结果?
EN

Stack Overflow用户
提问于 2012-01-13 08:44:02
回答 1查看 145关注 0票数 1

我有以下疑问:

代码语言:javascript
复制
-- Compare current period to historical data
select  Name ,
        avg(TimeProcessing + TimeRendering + TimeDataRetrieval) / 1000  as 'Current Month' ,
        isnull(count(TimeProcessing), 0)                                as 'Sample' ,
        min(l2.[Avg_Exec_Time_Previous_Month])                          as 'Previous Month' ,
        isnull(min(l2.[Executions_Last_Month]), 0)                      as 'Sample' ,
        min(l3.[Avg_Exec_Time_Two_Months_Ago])                          as 'Two Months ago' ,
        isnull(min(l3.[Executions_Two_Months_Ago]), 0)                  as 'Sample'
from    marlin.report_execution_log l
        inner join marlin.report_catalog c on l.ReportID = c.ItemID
        left outer join ( 
                        select    
                            l2.ReportID ,
                            (
                            avg(l2.TimeProcessing + l2.TimeRendering 
                            + l2.TimeDataRetrieval) / 1000 
                            ) as 'Avg_Exec_Time_Previous_Month' ,
                            count(l2.TimeProcessing) as 'Executions_Last_Month'
                        from    
                            marlin.report_execution_log l2
                        where   
                            TimeEnd between dateadd(MONTH, -2, getdate())
                                    and     dateadd(MONTH, -1, getdate())
                        group by  
                            l2.ReportID
                        ) l2 on l.ReportID = l2.ReportID
        left outer join ( 
                        select    
                            l3.ReportID ,
                            (
                            avg(l3.TimeProcessing + l3.TimeRendering + l3.TimeDataRetrieval) / 1000 
                            ) as 'Avg_Exec_Time_Two_Months_Ago' ,
                            count(l3.TimeProcessing) as 'Executions_Two_Months_Ago'
                        from  
                            marlin.report_execution_log l3
                        where 
                            TimeEnd between dateadd(MONTH, -3, getdate())
                                    and     dateadd(MONTH, -2, getdate())
                        group by  
                            l3.ReportID
                        ) l3 on l.ReportID = l3.ReportID
group by    l.ReportID ,
            Name
order by    2 desc

这将显示以下结果:

不幸的是,我们的一个报告在整个月中更改了名称,随后我需要合并这两行。这个是可能的吗?如何合并两行?例如,如何让第一行和第二行使用第一行报告名称显示相加结果?

EN

Stack Overflow用户

回答已采纳

发布于 2012-01-13 09:09:07

如果我理解得很好,您只需要在select和group by中使用case语句。就像这样

代码语言:javascript
复制
select  case when Name = 'Project1' then 'Project1'
             when Name = 'Project2' then 'Project1'
             else Name
        end as NAME
.......
group by case when Name = 'Project1' then 'Project1'
             when Name = 'Project2' then 'Project1'
             else Name
        end

如果您的案例是现在是项目1,一个月前是项目2,您可能需要在case语句中添加日期(只是为了以防万一)

代码语言:javascript
复制
 select  case when Name = 'Project1' and TimeEnd = getdate()  then 'Project1'
                 when Name = 'Project2' and TimeEnd = dateadd(MONTH, -1, getdate()) then 'Project1'
                 else Name
            end as NAME
    .......
    group by case when Name = 'Project1' and TimeEnd = getdate()  then 'Project1'
                 when Name = 'Project2' and  TimeEnd = dateadd(MONTH, -1, getdate()) then 'Project1'
                 else Name
        end

这就是我们的想法。

编辑。

我认为如果他们被重复,你可以选择,但我真的一点也不喜欢

代码语言:javascript
复制
SELECT NAME, AVG(Current Month) as Current Month, count(Sample) as Sample, min(Previous Month) as Previous Month, min(Sample2) as Sample2, min(Two Months ago) as Two Months ago,
min(Sample3) as Sample3
FROM
(
select  Name ,
        avg(TimeProcessing + TimeRendering + TimeDataRetrieval) / 1000  as 'Current Month' ,
        isnull(count(TimeProcessing), 0)                                as 'Sample' ,
        min(l2.[Avg_Exec_Time_Previous_Month])                          as 'Previous Month' ,
        isnull(min(l2.[Executions_Last_Month]), 0)                      as 'Sample2' ,
        min(l3.[Avg_Exec_Time_Two_Months_Ago])                          as 'Two Months ago' ,
        isnull(min(l3.[Executions_Two_Months_Ago]), 0)                  as 'Sample3'
from    marlin.report_execution_log l
        inner join marlin.report_catalog c on l.ReportID = c.ItemID
        left outer join ( 
                        select    
                            l2.ReportID ,
                            (
                            avg(l2.TimeProcessing + l2.TimeRendering 
                            + l2.TimeDataRetrieval) / 1000 
                            ) as 'Avg_Exec_Time_Previous_Month' ,
                            count(l2.TimeProcessing) as 'Executions_Last_Month'
                        from    
                            marlin.report_execution_log l2
                        where   
                            TimeEnd between dateadd(MONTH, -2, getdate())
                                    and     dateadd(MONTH, -1, getdate())
                        group by  
                            l2.ReportID
                        ) l2 on l.ReportID = l2.ReportID
        left outer join ( 
                        select    
                            l3.ReportID ,
                            (
                            avg(l3.TimeProcessing + l3.TimeRendering + l3.TimeDataRetrieval) / 1000 
                            ) as 'Avg_Exec_Time_Two_Months_Ago' ,
                            count(l3.TimeProcessing) as 'Executions_Two_Months_Ago'
                        from  
                            marlin.report_execution_log l3
                        where 
                            TimeEnd between dateadd(MONTH, -3, getdate())
                                    and     dateadd(MONTH, -2, getdate())
                        group by  
                            l3.ReportID
                        ) l3 on l.ReportID = l3.ReportID
group by    l.ReportID ,
            Name
)
group by  Name
order by    2 desc
票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8844474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档