我接近拔出我的頭髮,因爲我無法弄清楚如何做下面的T -SQL查詢在亞音速2.2:亞音速查詢條件A AND((條件B AND條件C)OR(條件D AND條件E和條件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
我試着在至少10種不同的方式如下亞音速選擇,但我不能讓它產生相同的結果
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([dbo]。[vSalesRepCommissionGrouped]。[SurgeryDate] > = SurgeryDate2 AND [dbo]。[vSalesRepCommissionGrouped]。[SurgeryDate] <= SurgeryDate3 OR [dbo]。[vSalesRepCommissionGrouped]。[SurgeryDate]> = SurgeryDate4 AND [dbo]。[vSalesRepCommissionGrouped]。[SurgeryDate] <= SurgeryDate5 AND [ dbo]。[vSalesRepCommissionGrouped]。[POReceivedOn]> = POReceivedOn6))ORDER BY SurgeryDate ASC' – ajtatum 2012-02-02 21:25:04
'AND'語句不需要括號,它們自然優先於'OR'比較。另請參見[T-SQL運算符優先級](http://msdn.microsoft.com/zh-cn/library/ms190276.aspx)。 – marapet 2012-02-02 21:56:46
奇怪。所以:WHERE [UserID] IN(UserID0In1,UserID0In2,UserID0In3)AND([SurgeryDate]> = SurgeryDate1 AND [SurgeryDate] <= SurgeryDate2 OR [SurgeryDate]> = SurgeryDate3 AND [SurgeryDate] <= SurgeryDate4 AND [POReceivedOn]> = (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')' – ajtatum 2012-02-02 22:59:54