SQL每周创建一列(循环?)



我需要做一份每周更改的报告。这是今天金额的代码

SELECT 
[Entry No_],
[Customer No_],
[Posting Date],
[Description],
[Currency Code],
Trans_type = case when [Deposit]=1 then 'Deposit' 
when [Imprest]=1 then 'Imprest' 
else 'Other' end,
A.Amount
FROM Table1
LEFT JOIN
(
SELECT Distinct [Cust_ Ledger Entry No_],
SUM ([Amount EUR]) as 'amount'
FROM Table2
group by [Cust_ Ledger Entry No_]
having
SUM ([Amount EUR]) <> '0'
)A
on [Entry No_] = A.[Cust_ Ledger Entry No_]
Where 
A.Amount is not NULL

生成上周数据的代码在这里(只添加where子句(:

SELECT 
[Entry No_],
[Customer No_],
[Posting Date],
[Description],
[Currency Code],
Trans_type = case when [Deposit]=1 then 'Deposit' 
when [Imprest]=1 then 'Imprest' 
else 'Other' end,
A.Amount
FROM Table1
LEFT JOIN
(
SELECT Distinct [Cust_ Ledger Entry No_],
SUM ([Amount EUR]) as 'amount'
FROM Table2
where [posting Date] < '2020-11-23'
group by [Cust_ Ledger Entry No_]
having
SUM ([Amount EUR]) <> '0'
)A
on [Entry No_] = A.[Cust_ Ledger Entry No_]
Where 
A.Amount is not NULL

将两个查询联合起来,然后导出到Excel并进行透视就足够了,但问题是我需要过去50周的结果。有没有什么聪明的方法可以避免联合50个表,并运行一个简单的代码来生成周报?

感谢

使用sample可能会更容易,但我不知道如何在这里粘贴表。。

也许这是真的,我在这里不需要工会,分组就足够了,但这对我来说仍然很困难:(

好的。假设表有这样的标题:项目|国家|日期||金额

下面的代码返回今天的金额

Select 
Project,
SUM(amount)
From Table
Group by Project

我实际上需要今天的日期,以及前几周的结果(11月22日(第47周(、11月15日(第46周(等的结果是什么……从今天起总共50周(。

前一周金额的代码在这里:

Select 
Project,
SUM(amount)
From Table
Where Date < '2020.11.23'
Group by Project

所以我的想法是创建50个代码并将结果连接在一起,但我相信这是一个更好的方法。此外,我不想每周编辑这个查询,并为它添加一个新的日期。

有什么想法,让我的生活更轻松吗?

如果我正确理解了你的要求,你所需要做的就是从日期中提取一周,例如

Select 
Project,
datepart(week, date),
SUM(amount)
From Table
Where Date < '2020.11.23'
Group by Project, datepart(week, date)

最新更新