2017-09-07 279 views
0

我有一个表,让我仰望的日期,然后检索财政期间,每周它属于什么等等加入今天的日期

此表的格式如下:

日期(DATETIME)

FinancialPd

FinancialWk

FinancialYr

我希望能够做的是采取今天的日期,并找出它属于报告自动化的财务期。

到目前为止,我曾尝试:

SELECT 
SUM(Revenue) as revenue, 
periods.Date, 
periods.financialPd 

FROM 

[tbl].[dbo].[view] ordTbl 

INNER JOIN [tbl].[dbo].[caltbl] as periods 
ON GETDATE() = periods.Date 

我预期的结果会是这样的:

今天是:2017年1月15日00:00:00

财务期:1

收入:1582.08

编辑**

TDLR;我需要取得今日日期,在我的日历表中查找,并返回适当的财务期。

+2

你很困惑加入在哪里。使用日期列适当的日历表加入您的视图。如果你只想要今天的订单,添加一个WHERE子句来过滤视图或日历表 –

+0

@PanagiotisKanavos不,这不是关于订单,这是关于计算今天日期属于哪个财务周期。 – 80gm2

+1

那你为什么把那个观点放在那里?你为什么使用JOIN?只需使用日历表上的WHERE即可。 –

回答

3

根据Panagiotis Kanavos评论,您应该使用WHERE子句。

好像你想要的日期(datetime值)转换为date值,试试这个:

SELECT periods.Date, periods.financialPd 
FROM [tbl].[dbo].[view] ordTbl 
INNER JOIN [tbl].[dbo].[caltbl] as periods 
ON periods.[YourJoinField] = ordTbl.[YourJoinField] 
WHERE CAST(GETDATE() AS DATE = CAST(periods.Date AS DATE) 

你可能不需要第二投,取决于periods.Date的数据类型。

不确定这是否是查询的简化版本,但您不会从ordTbl中选择任何内容,以便根本不需要连接。

如果你不需要的订单表,那么你只是想这样的事情:

SELECT periods.Date, periods.financialPd 
FROM [tbl].[dbo].[caltbl] as periods 
WHERE CAST(GETDATE() AS DATE = CAST(periods.Date AS DATE) 

的原因CASTGETDATE()将返回一个datetime值,所以:

SELECT GETDATE() 

返回:2017-09-07 15:49:54.233它永远不会等于:2017-09-07,因为它将默认为:2017-09-07 00:00:00.000

+1

不需要投射日历表的日期。它*应该是没有时间部分的日期或日期时间 –

+0

我的[YourJoinField]是当前日期的GetDate()。 – 80gm2

+1

@PanagiotisKanavos我不确定,因此该行:_You可能不需要第二次演员,具体取决于期间的数据类型。日期._ – Tanner