Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 - Fatal编程技术网

SQL:列出在两个时间段之间未售出的项目

SQL:列出在两个时间段之间未售出的项目,sql,sql-server,Sql,Sql Server,我们使用的软件有两个订单表,orders和OrderItems。 我试图在数据库上运行一个查询,以显示哪些商品在一段时间内没有售出。 这是我拥有的,但它不起作用(它会显示所有记录) 改变你的约会。它应该是介于[结束日期]之间的[开始日期] WHERE (OrderItem.SKU NOT IN (SELECT DISTINCT OrderItem.SKU WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09

我们使用的软件有两个订单表,orders和OrderItems。 我试图在数据库上运行一个查询,以显示哪些商品在一段时间内没有售出。 这是我拥有的,但它不起作用(它会显示所有记录)


改变你的约会。它应该是介于[结束日期]之间的[开始日期]

WHERE (OrderItem.SKU NOT IN
      (SELECT DISTINCT OrderItem.SKU
       WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08'))) 

改变你的约会。它应该是介于[结束日期]之间的[开始日期]

WHERE (OrderItem.SKU NOT IN
      (SELECT DISTINCT OrderItem.SKU
       WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08'))) 

改变你的约会。它应该是介于[结束日期]之间的[开始日期]

WHERE (OrderItem.SKU NOT IN
      (SELECT DISTINCT OrderItem.SKU
       WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08'))) 

改变你的约会。它应该是介于[结束日期]之间的[开始日期]

WHERE (OrderItem.SKU NOT IN
      (SELECT DISTINCT OrderItem.SKU
       WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08'))) 

那么以下内容如何:

SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o 
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
  SELECT os.SKU 
  FROM [Order] os
  INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
  WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)

您必须加入子查询中的
OrderItem
表才能获得
SKU

以下内容如何:

SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o 
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
  SELECT os.SKU 
  FROM [Order] os
  INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
  WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)

您必须加入子查询中的
OrderItem
表才能获得
SKU

以下内容如何:

SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o 
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
  SELECT os.SKU 
  FROM [Order] os
  INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
  WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)

您必须加入子查询中的
OrderItem
表才能获得
SKU

以下内容如何:

SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o 
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
  SELECT os.SKU 
  FROM [Order] os
  INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
  WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)

您必须加入子查询中的
OrderItem
表,才能获得
SKU

看起来您的查询是“颠倒”生成的

SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
    (SELECT 1 FROM Order o
    JOIN OrderItem oi2 ON  o.OrderID = oi2.OrderID
    WHERE oi2.SKU = oi.SKU
    AND o.OrderDate BETWEEN  '2014-01-01' AND '2014-09-08' );

看起来您的查询是“颠倒”生成的

SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
    (SELECT 1 FROM Order o
    JOIN OrderItem oi2 ON  o.OrderID = oi2.OrderID
    WHERE oi2.SKU = oi.SKU
    AND o.OrderDate BETWEEN  '2014-01-01' AND '2014-09-08' );

看起来您的查询是“颠倒”生成的

SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
    (SELECT 1 FROM Order o
    JOIN OrderItem oi2 ON  o.OrderID = oi2.OrderID
    WHERE oi2.SKU = oi.SKU
    AND o.OrderDate BETWEEN  '2014-01-01' AND '2014-09-08' );

看起来您的查询是“颠倒”生成的

SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
    (SELECT 1 FROM Order o
    JOIN OrderItem oi2 ON  o.OrderID = oi2.OrderID
    WHERE oi2.SKU = oi.SKU
    AND o.OrderDate BETWEEN  '2014-01-01' AND '2014-09-08' );

理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出)

如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品

select i.SKU from (
  select distinct oi.SKU from OrderItem oi
) i
where not exists (
  select 1 from OrderItem oi
  join Order o on o.OrderID = oi.OrderID
  where oi.SKU = i.SKU
  and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)

理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出)

如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品

select i.SKU from (
  select distinct oi.SKU from OrderItem oi
) i
where not exists (
  select 1 from OrderItem oi
  join Order o on o.OrderID = oi.OrderID
  where oi.SKU = i.SKU
  and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)

理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出)

如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品

select i.SKU from (
  select distinct oi.SKU from OrderItem oi
) i
where not exists (
  select 1 from OrderItem oi
  join Order o on o.OrderID = oi.OrderID
  where oi.SKU = i.SKU
  and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)

理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出)

如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品

select i.SKU from (
  select distinct oi.SKU from OrderItem oi
) i
where not exists (
  select 1 from OrderItem oi
  join Order o on o.OrderID = oi.OrderID
  where oi.SKU = i.SKU
  and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)

实际上,您可以使用
having
子句来实现这一点:

SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
     OrderItem oi
     ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将
having
子句编写为:

HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'

您实际上可以通过
拥有
子句来实现这一点:

SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
     OrderItem oi
     ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将
having
子句编写为:

HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'

您实际上可以通过
拥有
子句来实现这一点:

SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
     OrderItem oi
     ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将
having
子句编写为:

HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'

您实际上可以通过
拥有
子句来实现这一点:

SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
     OrderItem oi
     ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将
having
子句编写为:

HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'


能否提供您的表格结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用-请参阅并提供您的表结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用-请参阅并提供您的表结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用-请参阅并提供您的表结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用
-请参阅,如果没有
from
子句,您真的希望这样做吗?这个查询可能会像编写的那样工作,但我相信它不会返回任何行。您真的希望在没有
from
子句的情况下工作吗?这个查询可能会像编写的那样工作,但我相信它不会返回任何行。您真的希望在没有
from
子句的情况下工作吗?这个查询可能会像编写的那样工作,但我相信它不会返回任何行。您真的希望在没有
from
子句的情况下工作吗?这个查询可能会像写的那样工作,但我相信它不会返回任何行。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切代码的名称时,它会返回所有需要的行,而不仅仅是以前返回的行。@JayLamay。这没有意义,除非
SKU
可以有多个名称。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切代码的名称时,它会返回所有需要的行,而不仅仅是以前返回的行。@JayLamay。这没有意义,除非
SKU
可以有多个名称。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切代码的名称时,它会返回所有需要的行,而不仅仅是以前返回的行。@JayLamay。这没有意义,除非
SKU
可以有多个名称。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切co的名称时