다음 T를 수행하는 방법을 알 수 없기 때문에 나머지 머리카락을 꺼내는 데 가깝습니다. -SQL 음속 2.2 쿼리 :. 나는 적어도 10 개 가지 방법으로 다음과 같은 음속 선택을 시도했습니다아음속 쿼리 조건 A AND ((조건 B AND 조건 C) OR (조건 D AND 조건 E AND 조건 F)
SELECT SalesRep, Location, InvoiceNumber, PONumber, POReceivedOn, SurgeryDate, Surgeon
FROM dbo.vSalesRepCommissionGrouped AS vsrcg
WHERE UserID IN (5, 6, 20)
AND ((SurgeryDate >= '2012-01-01'
AND SurgeryDate <= '2012-01-31'
)
OR (SurgeryDate >= '2011-12-01'
AND SurgeryDate <= '2011-12-31'
AND POReceivedOn >= '2012-01-01'
)
)
ORDER BY SurgeryDate ASC
,하지만 난 그게 동일한 결과를 얻을
new Select("SalesRep, Location, InvoiceNumber, PONumber, POReceivedOn, SurgeryDate, Surgeon")
.From(VSalesRepCommissionGrouped.Schema)
.WhereExpression("UserID").In(new[] { 5, 6, 20 })
.AndExpression("SurgeryDate").IsGreaterThanOrEqualTo(BeginDate).And("SurgeryDate").IsLessThanOrEqualTo(EndDate)
.Or("SurgeryDate").IsGreaterThanOrEqualTo(BeginDate.AddMonths(-1)).And("SurgeryDate").IsLessThanOrEqualTo(
EndDate.AddMonths(-1)).And("POReceivedOn").IsGreaterThanOrEqualTo(BeginDate).CloseExpression()
.OrderAsc("SurgeryDate");
수있는 사람하시기 바랍니다 수 없습니다 올바른 방향으로 나를 가리 키시겠습니까?
고마워요! - 앤드류
그게 다 가깝습니다. 첫 번째 AND 후 다른 괄호를 열지 않습니다. WHERE ([dbo]. [vSalesRepCommissionGrouped]. [UserID] IN (UserID0In1, UserID0In2, UserID0In3)) AND ([dS]. [vSalesRepCommissionGrouped]. [SurgeryDate] > 수술 날짜 및 [dbo]. [수술 날짜]. [수술 날짜] <= 수술 날짜 및 수술 날짜. [수술실 날짜]. [수술 날짜]> = 수술 날짜 및 [수술 도구]. [수술 일 수] dbo]. [vSalesRepCommissionGrouped]. [POReceivedOn]> = POReceivedOn6)) ORDER BY SurgeryDate ASC' – ajtatum
'AND' 문을 괄호로 묶을 필요는 없으며 자연스럽게'OR '비교보다 우선합니다. [T-SQL 연산자 우선 순위] (http://msdn.microsoft.com/en-us/library/ms190276.aspx)도 참조하십시오. – marapet
이상한.그래서 :'어디서 [UserID] IN (UserID0In1, UserID0In2, UserID0In3) AND ([SurgeryDate]> = SurgeryDate1 AND [SurgeryDate] <= SurgeryDate2 또는 [SurgeryDate]> = SurgeryDate3 AND [SurgeryDate] <= SurgeryDate4 AND [POReceivedOn]> = POReceivedOn5)'**는 ** '** 사용자 ID IN (5,6,20) AND (SurgeryDate> ='2012-01-01 AND SurgeryDate <= '2012-01-31'또는 SurgeryDate> = '2011-12-01'및 SurgeryDate <= '2011-12-31'AND POReceivedOn> = '2012-01-01') ' – ajtatum