2017-09-07 1 views
0

나는 내가 날짜를 검색 한 후 금융 기간, 주가 속한 것을 검색 할 수있는 테이블이에 등오늘 날짜 가입

다음과 같이 테이블의 형식은 다음과 같습니다

일 (DATETIME)

FinancialPd

FinancialWk

FinancialYr

내가 할 수있는 일은 오늘 날짜를 가져 와서보고 자동화를위한 재정 기간을 알아내는 것입니다.

은 지금까지 나는 시도했다 :

오늘 : 2017년 1월 15일 0시 0분 0초

금융 기간 : 1

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 

내 예상 된 결과는 다음과 같을 것

수익 : 1582.08

편집 **

TDLR; 나는 오늘 날짜를 가지고 달력 테이블에서 찾아보고 적절한 재정 기간을 되돌려 줘야합니다.

+2

JOIN과 WHERE를 혼동하고 있습니다. 적절한 날짜 열을 사용하여 달력 표와보기를 결합하십시오. 오늘의 주문 만 원한다면,보기 또는 달력 표를 필터링하는 WHERE 절을 추가하십시오. –

+0

@PanagiotisKanavos 아니요 주문에 관한 것이 아니라 오늘의 재정 기간을 계산하는 것입니다. – 80gm2

+1

그런데 왜 거기에 그 견해를 넣었습니까? 왜 JOIN을 사용 했습니까? 달력 테이블에서'WHERE'를 사용하십시오. –

답변

3

Panagiotis Kanavos 의견을 기준으로 WHERE 절을 사용해야합니다.

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의 데이터 유형에 따라 두 번째 캐스트를 필요로하지 않을 수 있습니다

당신이 date 값으로 날짜 (datetime 값)을 주조 할 것처럼,이 시도 보인다.

단순화 된 쿼리 버전인지 확실하지 않지만 ordTbl에서 아무것도 선택하지 않아도 가입이 필요하지 않을 수 있습니다.

당신이 주문 테이블을 필요로하지 않는 경우에, 당신은 단지 같은 것을 원하는 :

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

CAST에 대한 이유는 GETDATE()datetime 값을 반환하는 것입니다, 그래서 :

SELECT GETDATE() 

반품 : 2017-09-07과 동일하지 않은 2017-09-07 15:49:54.233 기본값 : 2017-09-07 00:00:00.000

+1

캘린더 테이블의 날짜를 전송할 필요가 없습니다. 그것은 시간 부분없이'date' 또는'datetime'이어야합니다. –

+0

내 [YourJoinField]는 현재 날짜 GetDate()입니다. – 80gm2

+1

@PanagiotisKanavos 필자는 확신하지 못했습니다. 따라서, periods.Date._ – Tanner