I 2008 SQL 서버에서 CASE 문으로 다시 쓰기이 Microsoft Access에서 IF 문에 시도 : 나는 여러 가지 방법을 시도했습니다케이스 문 SQL
Status: IIf(
IIf(B.[Online Class Completion Date] Is Null,
Null,
DateDiff("w",A.[Trust Start Date],B.[Online Class Completion Date])
) <=6,
"Pass",
IIf(
IIf(B.[Online Class Completion Date] Is Null,
Null,
DateDiff("w",A.[Trust Start Date],B.[Online Class Completion Date])
) >6,
"Fail",
IIf(DateDiff("w",A.[Trust Start Date],MAX(B.[Month])) <=6,
"NotApp",
"Never"
)
)
)
하지만 난 그냥 캔트 중첩 권리를 얻을 것 . 내가 쓰기 시작하는 패스를 얻고 실패하지만 NotApps 또는 느 베르
이는 없습니다 :
CASE WHEN
(CASE WHEN CONVERT(DATETIME,LEFT(B.[Online Class Completion Date],2)+'/'+SUBSTRING(B.[Online Class Completion Date],4,2)+'/'+RIGHT(B.[Online Class Completion Date],4),103) IS NULL
THEN NULL
ELSE DATEDIFF(ww,A.[Trust Start Date],CONVERT(DATETIME,LEFT(B.[Online Class Completion Date],2)+'/'+SUBSTRING(B.[Online Class Completion Date],4,2)+'/'+RIGHT(B.[Online Class Completion Date],4),103))
END)
<=6
THEN 'Pass'
WHEN
(CASE WHEN CONVERT(DATETIME,LEFT(B.[Online Class Completion Date],2)+'/'+SUBSTRING(B.[Online Class Completion Date],4,2)+'/'+RIGHT(B.[Online Class Completion Date],4),103) IS NULL
THEN NULL
ELSE DATEDIFF(ww,A.[Trust Start Date],CONVERT(DATETIME,LEFT(B.[Online Class Completion Date],2)+'/'+SUBSTRING(B.[Online Class Completion Date],4,2)+'/'+RIGHT(B.[Online Class Completion Date],4),103))
END)
>6
THEN 'Fail'
WHEN DATEDIFF(WEEK,A.[Trust Start Date],MAX(B.[Month])) <=6
THEN 'NotApp'
ELSE 'Never'
END AS [Status]
어떤 도움이 크게 감사합니다!
왜 이러한 모든 CONVERT가 날짜 값을 처리합니까? 적절한 데이터 유형을 사용하여 날짜 값을 저장하고 있습니까? – Paolo
데이터를 피더 시트에서 가져옵니다. 실제 날짜 값으로 날짜를 입력하는 다른 직원에게 의존 할 수 없습니다. 꽤 자주 텍스트로 입력되므로 변환됩니다. 모든 날짜가 실제로 날짜 값이되도록 보장하는 것은 아주 큰 작업입니다. –
큰 작업을 지연시키는 것만 유의하십시오. 가져 오기에서 데이터 정리 및 유효성 검사를 수행하지 않으면 ** 물릴 것입니다 * * 미래에 압력을 받고 바로 그 같은 작업을 완료해야합니다 (머피를 아십니까? 그는 데이터 가져 오기 작업을 좋아합니다! ^^). 그것이 한 번 수입이라면 시간을 들여 모든 필요한 수표를 수행하십시오. 예약 된/매일/어떤 수입이라면 나쁜 데이터를 거부하십시오. – Paolo