当前位置: 首页 > 面试题库 >

查询中的每一行可能有不同的条件吗?

公孙锋
2023-03-14
问题内容

如何选择一组行,其中每一行都匹配不同的条件?

例子:

假设我有一个带有名为name的列的表,仅在第一行名称匹配“ A”,第二行名称匹配“ B”且第三行名称匹配“ C”的情况下,才需要结果。

编辑:

我想这样做是为了工作,没有固定的尺寸,但在某种程度上,我可以这样定义的序列RXVPT和它的序列,每一个连续的匹配,但顺序。


问题答案:

假定您知道如何为行提供行号(例如,SQL Server中的ROW_NUMBER()),则可以创建一个查找(匹配)表并将其联接。参见以下说明:

查找表:

RowNum    Value
1         A
2         B
3         C

您的SourceTable源表(假设您已经向其中添加了RowNum,以防万一,请为其引入子查询(对于SQL Server
2005或更高版本,请引入CTE):

RowNum Name
-----------
1      A
2      B
3      C
4      D

现在,您需要将LookupTable与SourceTable进行内部联接LookupTable.RowNum = SourceTable.RowNum AND LookupTable.Name = SourceTable.Name。然后仅对RowNum的LookupTable进行此结果的左连接。如果LookupTable.RowNum IS NULL最终结果存在,那么您知道至少一行上没有完全匹配项。

这是联接的代码:

SELECT T.*, LT2.RowNum AS Matched 
FROM LookupTable LT2
LEFT JOIN 
(
    SELECT ST.*
    FROM SourceTable ST
    INNER JOIN LookupTable LT ON LT.RowNum = ST.RowNum AND LT.Name = ST.Name
) T
    ON LT2.RowNum = T.RowNum

以上查询的结果集将包含行,Matched IS NULL如果行与LookupTable表中的条件不匹配。



 类似资料:
  • 问题内容: 全部, 我敢肯定这是一个非常简单的SQL查询问题,但是我敢肯定有一个很好的方法,也很糟糕的方法来做到这一点。留给我自己的设备,我有可能以后者结束。所以… 我在Access中有一个表,其中的数据如下所示: 我想要获取的是每个具有唯一“截止日期”日期(采用YYYYMM格式)的唯一ID的“值”。 因此,我的结果集应如下所示: 请注意,不同的ID将具有不同的“截止日期”日期。换句话说,我不能简

  • 问题内容: 我有一个汽车表,其中包含汽车清单。表结构如下所示: 我想要一个查询,该查询返回每个品牌的10辆汽车。 等效于以下伪代码的内容: 这是我尝试失败的结果: -–每次返回仅返回一条记录。 这将返回每条记录。 我每辆汽车只需要10条记录。 谢谢你的帮助 问题答案: 这将给您您想要的: 要更改获取 哪 10行的选择,请更改最内层查询的顺序;我选择了id ,但您可以选择年份。只要是第一次,它将起作

  • 问题内容: 我正在尝试匹配更新并选择条件相同的查询计数。但是行数却有很大的不同。 更新查询: 选择查询 请帮我解决这个问题。 也请让我知道@@ rowcount将如何用于更新查询。 问题答案: 如果联接中涉及的至少两个表之间存在一对多关系,则会发生这种情况。 该会统计所有行,包括那些由加盟倍增,。该会仅计算唯一行受影响。 在存在一对多关系的地方,不能确定连接到特定行的“许多”行中的哪一行被用作该行

  • 我在StackOverflow上找到了一大堆关于条件WHERE子句的答案,但是我找不到一个对我的问题有点特殊的答案,所以我只是想寻求一些帮助。。。 我公司的网站包含所有直接写在C#代码中的SQL查询(我不喜欢,但那是另一回事) 表单中有一组复选框(目前有3个选项,但此列表可能会增加)。对于选择的每个“提供者类型”,需要向WHERE子句添加一个附加条件,但我不确定如何最好地处理这个问题。 下面是处理

  • 问题内容: 我正在创建一个SQL查询,该查询将基于两个聚合函数的值从表中提取记录。这些聚合函数从同一张表中提取数据,但过滤条件不同。我遇到的问题是,与仅包含一个SUM函数的情况相比,SUM的结果要大得多。我知道我可以使用临时表创建此查询,但是我只是想知道是否有一个仅需要单个查询的优雅解决方案。 我创建了一个简化版本来演示该问题。表结构如下: 这是查询: 任何见识将不胜感激。 问题答案: 编辑: 没

  • 问题内容: 我进行了很多搜索,但找不到有用的答案: 我想通过用户给我一个开始和结束日期来列出用户定义的时间段的总计。从开始日期到开始日期之间的每次总计应该相加,并在每一天添加1天。因此最后一行给出了从开始到结束日期的总计。示例:-给定期间=开始2013-01-01,结束= 2013-01-31 所以我有一个查询谁计算所有天: 我有一个查询谁每天计算总数 现在将这两者结合起来很难得到我的最终结果。