【发布时间】:2016-02-03 22:58:38
【问题描述】:
我正在使用 SQL Server 2008。我正在尝试根据 IF 语句来决定要运行哪个 WHERE 语句。这可能不是解决此问题的正确方法,老实说,我不确定。到目前为止,这是我的代码:
SELECT A.[ArTrnDetail].[Invoice]
,cast(A.[ArTrnDetail].[InvoiceDate] AS DATE) AS InvoiceDate
,A.[ArTrnDetail].[Branch]
,A.[ArTrnDetail].[Salesperson]
,rtrim(A.[ArTrnDetail].[Customer]) AS Customer
,rtrim(A.[ArTrnDetail].[StockCode]) AS StockCode
,A.[ArTrnDetail].[QtyInvoiced]
,A.[ArTrnDetail].[NetSalesValue]
,A.[ArTrnDetail].[SalesOrder]
,rtrim(A.[ArTrnDetail].[CustomerPoNumber]) AS CustomerPO
,cast(B.[EarliestSalesSeries].[InvoiceDate] as DATE) AS EarliestDate
,DATEADD(year, 1, B.[EarliestSalesSeries].[InvoiceDate]) as LatestDate
,A.[InvMaster].[Description]
,LEFT(A.[InvMaster].[UserField2], 3) AS SalesSeries
,DATEDIFF(DAY,B.[EarliestSalesSeries].[InvoiceDate], @enddate) as DateDifference
FROM A.[ArTrnDetail]
JOIN A.[InvMaster] ON A.[ArTrnDetail].StockCode
= A.[InvMaster].[StockCode]
JOIN B.[EarliestSalesSeries] ON A.[InvMaster].[UserField2]
= B.[EarliestSalesSeries].SalesSeries
我在代码开头的 SELECT 之前定义了 @firstYearDay。
我需要这样做:
IF LatestDate > @enddate 然后运行这个 where 子句:
WHERE (A.[ArTrnDetail].[InvoiceDate] between @firstYearDay and @enddate)
AND (DATEDIFF(YEAR,B.[EarliestSalesSeries].[InvoiceDate], @enddate) < 1)
ELSE IF LatestDate
WHERE (A.[ArTrnDetail].[InvoiceDate] between @firstYearDay and LatestDate)
AND (DATEDIFF(YEAR, B.[EarliestSalesSeries].[InvoiceDate], @firstYearDay) < 1)
如果您需要更多信息,请告诉我。我是stackoverflow的新手,所以请问!感谢您的帮助。
【问题讨论】:
-
带有 sql-server 版本标签,总是添加 sql-server 标签,让您的问题有更多的曝光率。
-
要改掉的坏习惯:对于日期范围的查询,请尽量远离
BETWEEN。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/…
标签: sql-server sql-server-2008 tsql