Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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查询中排除结果_Sql_Sql Server 2008 R2 - Fatal编程技术网

仅当满足这两个条件时才从SQL查询中排除结果

仅当满足这两个条件时才从SQL查询中排除结果,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有两个表,一个存储日期范围从今天2021-04-22到今天+5,另一个存储日期范围包含交货和产品。我需要返回日期范围表中的所有交货id(不包括定制产品),前提是交货结束日期等于今天,因此应包括A01,但不包括A02。目前,它排除了所有自定义项 输出应包括以下列: datess | delivery_id | product 表: CREATE TABLE dates ( datess DATETIME ); INSERT INTO dates(datess) VALUES ('20

我有两个表,一个存储日期范围从今天2021-04-22到今天+5,另一个存储日期范围包含交货和产品。我需要返回日期范围表中的所有交货id(不包括定制产品),前提是交货结束日期等于今天,因此应包括A01,但不包括A02。目前,它排除了所有自定义项

输出应包括以下列:

datess | delivery_id | product
表:

  CREATE TABLE dates 
(
  datess DATETIME
);
INSERT INTO dates(datess)
VALUES
('2021-04-22 00:00:00.000'),
('2021-04-23 00:00:00.000'),
('2021-04-24 00:00:00.000'),
('2021-04-25 00:00:00.000'),
('2021-04-26 00:00:00.000'),
('2021-04-27 00:00:00.000')


CREATE TABLE deliveries 
(
  delivery_id VARCHAR(20),
  product VARCHAR(10),
  start_date DATETIME,
  end_date DATETIME,
);
INSERT INTO deliveries(delivery_id, product, start_date, end_date)
VALUES
('A01', 'CUSTOM', '2021-04-22', '2021-04-23'),
('A02', 'CUSTOM', '2021-04-21', '2021-04-22'),
('A03', 'NORMAL', '2021-04-01', '2021-04-30'),
('A04', 'NORMAL', '2021-04-22', '2021-04-24'),
('A05', 'NORMAL', '2021-04-19', '2021-04-22'),
('A06', 'NORMAL', '2021-04-20', '2021-04-20')
以下是我的选择:

    declare @TodaysDate    datetime = CONVERT(DATETIME, CONVERT(DATE, CURRENT_TIMESTAMP)) + '00:00:00.000'
    declare @EndDate      datetime = dateadd(day,5,@TodaysDate)
    declare @TomorrowsDate      datetime = dateadd(day,1,@TodaysDate)
    
    select dt.datess, de.delivery_id, de.product from dates dt left join deliveries de
    on dt.datess between de.start_date and de.end_date
    and (de.end_date <> @TodaysDate AND de.product NOT LIKE '%CUSTOM%')
    
    order by delivery_id
我需要返回日期范围表中的所有交货id(不包括定制产品),前提是交货结束日期等于今天,因此应包括A01,但不包括A02

我不确定条件的第一部分是什么意思。但您可以使用以下逻辑处理其余部分:

select d.*
from deliveries d
where not (d.product = 'CUSTOM' and d.end_date = (select min(da.datess) from dates da));
如果我理解第一条,您可以使用:

select d.*
from deliveries d
where not (d.product = 'CUSTOM' and d.end_date = (select min(da.datess) from dates da)) or
      (d.product <> 'CUSTOM' and
       d.start_date in (select da.datess from dates da) and
       d.end_date in (select da.datess from dates da)
      );

是一个数据库。用你正在使用的数据库标记你的问题。还要清楚你想要的行。这很有效,谢谢你的帮助。我不太清楚我的描述,但在输出中我需要以下列:datess | delivery | u id | product