如何在SQL查询中求上月值和当月值之和

如何在SQL查询中求上月值和当月值之和,sql,sql-server,tableau-api,Sql,Sql Server,Tableau Api,请帮我解决这个问题。我必须编写一个查询来获取上个月值和当前月值的总和,但无法获得解决方案 这是一个图像,用于参考实际计数列值的总和,我需要结果 在Oracle中,您将使用以下内容,但在案例陈述中可能不完全正确: Select Site, sum(value * (case (date_transaction > trunc(sysdate, 'MM') then 1 else 0 end)) volume_current_month fr

请帮我解决这个问题。我必须编写一个查询来获取上个月值和当前月值的总和,但无法获得解决方案

这是一个图像,用于参考实际计数列值的总和,我需要结果


在Oracle中,您将使用以下内容,但在案例陈述中可能不完全正确:

Select 
      Site, 
      sum(value * (case (date_transaction > trunc(sysdate, 'MM') then 1 else 0 end))
        volume_current_month
    from myTable
    where date_transaction between add_months(trunc(sysdate,'MM'),-1) and sysdate
    group by site

使用另一个case语句时,上个月大致相同,在Oracle中,您将使用以下内容,但在case语句中可能不完全正确:

Select 
      Site, 
      sum(value * (case (date_transaction > trunc(sysdate, 'MM') then 1 else 0 end))
        volume_current_month
    from myTable
    where date_transaction between add_months(trunc(sysdate,'MM'),-1) and sysdate
    group by site

使用另一个case语句和
ADD_MONTHS

在Tableau中,上个月大致相同,有两种方法可以做到这一点:

第一条路

Under Analysis --> Total --> Add All SubTotals .
第二种方式:

创建一个计算字段
Total\u event
如下:

WINDOW_SUM(SUM([Event Count]))

使用事件名称计算窗口总和在表中有两种方法:

第一条路

Under Analysis --> Total --> Add All SubTotals .
第二种方式:

创建一个计算字段
Total\u event
如下:

WINDOW_SUM(SUM([Event Count]))

在tableau->创建计算字段->

//这是上个月的

if [date] >= DATE("01" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))

and [date] <= DATE("31" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))

//if the month has 30 or 28 days it will check that there is no 31 and return null

then

sum([Value])

end
您将有两个字段返回上个月的总和和本月的总和,然后您可以根据需要使用它们

在sql端,您可以使用

上个月->

select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',TIMESTAMPADD(mm,-1,GETDATE()))
当月->

select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',GETDATE()))

在tableau->创建计算字段->

//这是上个月的

if [date] >= DATE("01" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))

and [date] <= DATE("31" +"-" + (Month(TODAY())-1) +"-" + YEAR(TODAY()))

//if the month has 30 or 28 days it will check that there is no 31 and return null

then

sum([Value])

end
您将有两个字段返回上个月的总和和本月的总和,然后您可以根据需要使用它们

在sql端,您可以使用

上个月->

select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',TIMESTAMPADD(mm,-1,GETDATE()))
当月->

select sum(value) from table_name t where DATE_PART('month',t.date)=DATE_PART('month',GETDATE()))

如果您可以使用sql,并且您实际上需要上一个月,而不仅仅是所有月份的EventName总和,那么您可以使用LAG。我假设您是按EventName求和的,您只需要当前的EventName和以前的EventName

WITH Summed
AS
(
SELECT * ,
LAG(EventCount) OVER (Partition BY EventName ORDER BY trialmonth) as PrevEvent
FROM dbo.Table1 
)

    SELECT *,
    SUM(PrevEvent+EventCount) AS SummedCount

     FROM summed
     GROUP BY   Site
          ,TrialMonth
          ,EventName
          ,EventCount
          , PrevEvent
这将产生这样的输出

Site    TrialMonth  EventName   EventCount  PrevEvent   SummedCount
12101   2001-10-15  Actual Count    4   NULL    NULL
12101   2001-10-15  Projected Count 8   NULL    NULL
12101   2001-11-15  Actual Count    6   4   10
12101   2001-11-15  Projected Count 9   8   17
12101   2001-12-15  Actual Count    0   6   6
12101   2001-12-15  Projected Count 10  9   19

如果您可以使用sql,并且您实际上需要上一个月,而不仅仅是所有月份的EventName总和,那么您可以使用LAG。我假设您是按EventName求和的,您只需要当前的EventName和以前的EventName

WITH Summed
AS
(
SELECT * ,
LAG(EventCount) OVER (Partition BY EventName ORDER BY trialmonth) as PrevEvent
FROM dbo.Table1 
)

    SELECT *,
    SUM(PrevEvent+EventCount) AS SummedCount

     FROM summed
     GROUP BY   Site
          ,TrialMonth
          ,EventName
          ,EventCount
          , PrevEvent
这将产生这样的输出

Site    TrialMonth  EventName   EventCount  PrevEvent   SummedCount
12101   2001-10-15  Actual Count    4   NULL    NULL
12101   2001-10-15  Projected Count 8   NULL    NULL
12101   2001-11-15  Actual Count    6   4   10
12101   2001-11-15  Projected Count 9   8   17
12101   2001-12-15  Actual Count    0   6   6
12101   2001-12-15  Projected Count 10  9   19


您希望在Tableau或SQL中使用此选项吗?在Tableau中,我们可以很容易地实现这一点。请在Tableau中为我提供解决方案。研究
groupbyrollup
您希望在Tableau或SQL中实现这一点吗?在Tableau中,我们可以很容易地实现这一点。请在Tableau中为我提供解决方案。研究
groupby rollup
即使有提示,也很难获得正确的格式。抱歉。通常情况下,当出现时会出现这种情况,但Oracle可能会接受这种情况?感谢您的回复,我将尝试。即使有提示,也很难正确获取格式。抱歉。通常情况下,如果,这将是
情况,但Oracle可能会接受此情况?感谢您的回复,我将尝试。我尝试了此操作,但结果不是预期的,请参阅链接-“”,我已请求表中的问题,请检查问题是“如何查找每个站点与上个月的差异”我只需要本月和上个月的实际计数和或差。@KannanAthmanathan您得到的结果是什么?我正按照你的要求得到想要的结果。您可能会共享您的问题的公共链接。我曾尝试过此操作,但结果不是预期的,请参考链接-“”,我已要求在tableau中解决问题。请检查问题是“如何找到每个站点与上个月的差异”我只需要本月和上个月的实际计数和或差。@KannanAthmanathan您得到的结果是什么?我正按照你的要求得到想要的结果。您可以共享问题的公共链接。