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

在SQL Server的INSERT INTO SELECT查询中的字段中添加增量数字

柴晔
2023-03-14
问题内容

我有一个INSERT INTO SELECT查询。在SELECT语句中,我有一个子查询,我想在其中添加一个递增数字。如果我的SELECT查询仅返回一条记录,则此查询将正常工作;但是,如果返回多行,则在所有这些行的增量字段中插入相同的数字。有什么方法可以限制它每次添加一个增量数字?

INSERT INTO PM_Ingrediants_Arrangements_Temp 
(AdminID,ArrangementID,IngrediantID,Sequence)
(SELECT 
     @AdminID, @ArrangementID, PM_Ingrediants.ID, 
     (SELECT 
          MAX(ISNULL(sequence,0)) + 1 
      FROM
          PM_Ingrediants_Arrangements_Temp 
      WHERE 
          ArrangementID=@ArrangementID)
FROM 
    PM_Ingrediants 
WHERE 
    PM_Ingrediants.ID IN (SELECT 
                              ID 
                          FROM 
                              GetIDsTableFromIDsList(@IngrediantsIDs))
)

问题答案:

您可以使用此row_number()功能。

INSERT INTO PM_Ingrediants_Arrangements_Temp(AdminID, ArrangementID, IngrediantID, Sequence)
    SELECT @AdminID, @ArrangementID, PM_Ingrediants.ID,
            row_number() over (order by (select NULL))
    FROM PM_Ingrediants 
    WHERE PM_Ingrediants.ID IN (SELECT ID FROM GetIDsTableFromIDsList(@IngrediantsIDs)
                             )

如果要从表中已有的最大值开始,请执行以下操作:

INSERT INTO PM_Ingrediants_Arrangements_Temp(AdminID, ArrangementID, IngrediantID, Sequence)
    SELECT @AdminID, @ArrangementID, PM_Ingrediants.ID,
           coalesce(const.maxs, 0) + row_number() over (order by (select NULL))
    FROM PM_Ingrediants cross join
         (select max(sequence) as maxs from PM_Ingrediants_Arrangement_Temp) const
    WHERE PM_Ingrediants.ID IN (SELECT ID FROM GetIDsTableFromIDsList(@IngrediantsIDs)
                             )

最后,您可以使该sequence列成为自动递增的身份列。这样就无需每次都增加它:

create table PM_Ingrediants_Arrangement_Temp ( . . .
    sequence int identity(1, 1) -- and might consider making this a primary key too
    . . .
)


 类似资料:
  • 问题内容: 在我的表格中,我有一个名为的字段,格式为。 我如何进行查询,以便将 一天 添加到例如今天的情况下,我想显示in子句以返回带有明天日期的所有记录。 更新: 我尝试了这个: 但不幸的是,即使我添加的间隔大于1,它也会返回相同的记录。 结果: 但是我只想选择明天的日期的记录。 问题答案: 您可以使用以下功能: 它也可以在语句中使用:

  • 本文向大家介绍如何在MySQL查询中向datetime字段添加日期?,包括了如何在MySQL查询中向datetime字段添加日期?的使用技巧和注意事项,需要的朋友参考一下 要将日期添加到日期时间字段,请使用DATE_ADD()函数。语法如下- 让我们首先创建一个表- 借助插入当前日期,然后使用date_add()函数添加一天。 要在表格中插入一天,以下是查询- 在select语句的帮助下显示记录。

  • 我有一个非常特别的问题,关于查询嵌套到数组字段的布尔字段和字符串字段。索引映射如下所示: 文档索引还有许多其他字段,这些字段没有嵌套到数组字段中,但必须包含在查询字段中。我尝试了一种使用过滤器和布尔查询的方法,如下所示: 这个查询的问题是,它返回的文档在我看来不必返回。在这种情况下,文件如下所示: 您可以注意到,array_field_1的第三项包含boolean_field_2:false和正在

  • 索引时间字段提升和查询时间提升 Lucene的FAQ似乎与javadoc冲突。(Lucene 4.9.0) 常见问题: 索引时间字段增强(field.set增强(增强))是一种表达类似于“此文档的标题价值是大多数文档标题的两倍”的方式。查询时间提升(query.setBoost(提升))是表达“我关心查询的这个子句上的匹配是关心查询的其他子句上的匹配的两倍”的一种方式。 如果您在每个文档上设置索引

  • 问题内容: 我已将此代码用于提供+1分,但无法正常工作。 $ points变量现在是用户的点数。.我希望它加上一个点数。.例如,如果他有5个点数,它应该是5 + 1 =6。 但是没有,它只是改变了到1 我做错了什么?谢谢 问题答案: 您也可以这样做:

  • 问题内容: 最近,Elasticsearch允许在查询中使用向量和稀疏向量。在他们的文档之后,我发现了一个错误,本质上是: 似乎“嵌入”不是一个成功的领域。 我将文档上传到Elasticsearch如下: 我为每个文档创建一个json文件 我在Python中加载json文件 我将这些objetcs传递给Elasticsearch: 这是我的json文件的结构(请注意,嵌入是字典,因为它是稀疏向量)