在sql查询中使用单元格范围作为条件

yrefmtwq  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(382)

我的公司使用sql server数据库。
如果某个单元格区域等于这些值中的任何一个值,是否可以在sql查询中使用该区域作为条件?它甚至可以在同一行上使用日期范围吗?
参考示例:

数据示例:

所需输出:

问题1:我可以引用整个专栏吗?

SELECT ID, sum(units) FROM sales WHERE ID = any ID in Column A

问题2:我可以只指定一个单元格范围吗?

SELECT ID, sum(units) FROM table WHERE ID = any value in A2:A10

问题3:我是否可以添加一个日期范围单元格引用,使同一个id可能出现多次,但具有不同的日期范围(请参见示例中的747375),并分别返回两个范围的结果?

SELECT ID, sum(units) FROM table WHERE ID = any value in A2:A10 AND DATE >= date found in column B that is next to ID in the same row AND DATE <= date found in column C that is next to ID in the same row
km0tfn4u

km0tfn4u1#

你可以用 between 如下所示

select
     r.id,
     sum(units) as units
from reference r
join data d
on r.id = d.id
where d.date between r.start and r.end
group by
     r.id
nuypyhwy

nuypyhwy2#

问题1:我可以引用整个专栏吗?
对。违约 select 没有一个 where 子句将引用整个列。
你的榜样 SELECT ID, sum(units) FROM sales WHERE ID = any ID in Column A 逻辑上不合理。从 select ,我假定您需要每个id的单位之和,而不是不考虑id的所有单位之和。为此,您要使用 group by ```
select ID, sum(units) totalunits
from sales
group by ID

不需要where子句,因为您需要所有内容。
问题2:我可以只指定一个单元格范围吗?
对。
没有。
sql中没有直接的“单元格范围”概念(好吧,也许吧) `top` 但不是真的)。数据在sql中无序存储。在excel中,单元格范围“a2:a10”表示“此时这些单元格中恰好出现的值”。通常这意味着“第二次到第十次的值输入时间”,或“第一次到第九次的值输入时间”如果有一个标题行。但是稍后你可以对数据进行不同的排序,现在那里有不同的数据。在sql中,存储中没有顺序。您可以在选择数据时为输出指定顺序,但这是为每个数据手动指定的 `select` .
然而,相关概念可能相当明显。”a2:a10“通常是指“按日期/时间排列的前9个值”,或“最大/最小9个值”等。
你的榜样 `SELECT ID, sum(units) FROM table WHERE ID = any value in A2:A10` 需要更改以定义a2:a10中期望的值。例如,如果a2:a10按日期表示前9个值,您可以这样做:(untested)

select ID, sum(units) totalunits
from sales
where ID in (select top(9) ID
from sales
order by date
)
group by ID

这将提供按日期输入的前9个ID中的每个ID的单位总和(如何处理第9个ID的领带我将不在这里讨论)。
问题3:我是否可以添加一个日期范围单元格引用,使同一个id可能出现多次,但具有不同的日期范围(请参见示例中的747375),并分别返回两个范围的结果?
这个很难理解。从你对第二个问题的回答来看,这可能毫无意义。但是,您可以设置一个查询来选择所需的id,并且在该查询中还可以选择最小和最大日期。最后,可以将该查询中的信息用作子查询,以按id获取信息,该id包含最小/最大日期内的单位和最小/最大日期外的单位和。这将需要一些努力,我不会在这个时候试图为你弄清楚。

相关问题