Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用多个Where条件选择_Sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql 使用多个Where条件选择

Sql 使用多个Where条件选择,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我正在尝试选择一系列不同的标准。我基本上要把今天的日期,和我们的发票表对比,来计算我们今年的发展情况,与过去几年相比 最后,我基本上希望有年度、年初至今销售额、季度至今销售额和月度至今销售额的列。我已经开始为此创建一个循环,但我遇到的问题是,它执行了几个select,并没有返回一个数据集,而是返回了3个 解决这个问题的最佳方法是构建一个虚拟表,用我的结果填充它,然后从中选择它们吗 以下是我目前掌握的情况: DECLARE @startDate date, @endDate date; DECLA

我正在尝试选择一系列不同的标准。我基本上要把今天的日期,和我们的发票表对比,来计算我们今年的发展情况,与过去几年相比

最后,我基本上希望有年度、年初至今销售额、季度至今销售额和月度至今销售额的列。我已经开始为此创建一个循环,但我遇到的问题是,它执行了几个select,并没有返回一个数据集,而是返回了3个

解决这个问题的最佳方法是构建一个虚拟表,用我的结果填充它,然后从中选择它们吗

以下是我目前掌握的情况:

DECLARE @startDate date, @endDate date;
DECLARE @counter int = 0;


WHILE @counter < 3 BEGIN
    --set start and end dates
    SELECT @startDate = CONVERT(date, (CONVERT(nvarchar, YEAR(DATEADD(YEAR,-1 * @counter, CONVERT(date, GETDATE())))) + '-02-01'));
    SELECT @endDate = DATEADD(YEAR,-1 * @counter, CONVERT (date, GETDATE()));

    --select results
    SELECT YEAR(ib.DateDelivered) [Year], SUM(ib.TotalAmountLessFreight) [YTD Sale]
    FROM InvoiceBase ib
    WHERE ib.DateDelivered < @endDate
        AND ib.DateDelivered > @startDate
    GROUP BY YEAR(ib.DateDelivered);

    --increment
    SET @counter = @counter + 1;
END

最好的方法是在一个查询中完成。尝试:

;with cte as
(select i.*, 
        dateadd(year, datediff(year,DateDelivered,getdate()), getdate()) [YearEnd]
 FROM InvoiceBase i)
select YEAR(DateDelivered) [Year],
       SUM(case when DateDelivered <= YearEnd 
                then TotalAmountLessFreight end) [YTD Sales],
       SUM(case when DateDelivered <= YearEnd and 
                     month(DateDelivered) >= floor((month(YearEnd)+2)/3)*3-2
                then TotalAmountLessFreight end) [QTD Sales],
       SUM(case when DateDelivered <= YearEnd and 
                     datediff(month, DateDelivered, YearEnd) = 0
                then TotalAmountLessFreight end) [MTD Sales]
FROM cte
GROUP BY YEAR(DateDelivered)

你能给我们看一个你目前得到的结果集的例子吗?你想看到什么?现在我在我的结果集中得到了Year和YTD Sales列。但我得到了2013年、2012年和2011年的一个结果集。我希望看到一个结果集,每个结果集都有行。不要使用计数器,而是将startDate和endDate更改为包含您要查询的所有三年。只需选择x,其中a、b、c?好主意!随时都可以,乐意帮忙!