SQL 给出指定的金额什,自动匹配金额明细

本文介绍了一种使用SQL递归查询表达式来自动匹配指定金额的明细表行数据的方法。通过创建临时表并运用递归公用表表达式(CTE),实现了从上至下累加金额直至达到目标值的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一个金额值,例100,可以自动找出汇总成100的明细
明细表1
ID  TOTAL
1     20
2     20
3     30
4     50
5     20
6    10
7    30
8    50
顺序从上往下拉,最终结算应该是这样,
ID  TOTAL
1     20
2     20
3     30
5     20
6    10

找出的行数金额加起来是100


----------------------------------------------------------------------

   
CREATE TABLE [dbo].[Table_A](
    ID int ,TOTAL int
ON [PRIMARY]
   
GO
   
insert [Table_A]
select 1,20
union select 2,20
union select 3,30
union select 4,50
union select 5,20
union select 6,    10
union select 7,    30
union select 8 ,   50
 
--    序号连续的情况下用这种,如果不连续,可以先用row_number生个个新列
;WITH DEPTS AS(
 -- 定位点成员
 SELECT ID,total,total_s = total,flag = 1 FROM [Table_A] where ID = 1 
 UNION ALL
 -- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
 SELECT a.ID,a.total ,total_s = case when total_s + a.total > 100 then total_s else total_s + a.total end 
 ,flag = case when total_s + a.total > 100 then else end 
 FROM [Table_A] A, DEPTS B
 WHERE A.id = B.id + 1
)
SELECT FROM DEPTS where flag = 1
GO
 
/*
1    20    20    1
2    20    40    1
3    30    70    1
5    20    90    1
6    10    100    1
*/
 
 
DROP TABLE [Table_A];


<think>好的,我需要回答用户关于泛微OA流程明细字段属性功能的使用说明。首先,我需要查看用户提供的三个引用内容,看看是否有相关的信息。 引用[1]提到,泛微OA在流程设置时,无法直接使用明细字段信息来控制流程走向,只能使用主表字段。这可能说明用户在使用明细字段时需要特别注意其访问方式。不过这个问题可能和字段属性功能相关,但具体如何操作还不清楚。 引用[2]详细介绍了字段属性的功能,包括位置和具体操作,如插入SQL、字段赋值、计算时间字段的加减法。这里的位置是后端-流程引擎-路径管理中的字段属性设置,适用于主表和明细表吗?需要确认明细字段是否也可以在这里进行设置。用户的问题是关于明细字段的,所以需要明确说明如何在明细表中应用这些功能。 引用[3]提到在流程明细表校验时,主表和明细表的字段访问方式不同,明细表需要通过特定的索引方式(如jQuery("#fieldID_"+i).val())。这可能说明在处理明细字段时,字段属性中的SQL插入或赋值可能需要类似的索引处理。例如,在插入SQL时是否需要动态处理行号?或者在字段赋值时如何引用同一行中的其他字段? 现在需要将这些信息整合,回答用户的问题:泛微OA流程明细字段的字段属性功能使用说明。根据引用[2],字段属性功能包括插入SQL、字段赋值和时间计算,但需要明确这些功能在明细表中的具体应用步骤。 首先,位置方面,用户需要进入流程引擎的路径管理,找到对应的流程节点,在显示模板中设置字段属性。但针对明细字段,是否需要进入明细表的字段设置?或者是否在同一个界面中选择明细表的字段? 其次,插入SQL操作可能用于从数据库读取数据填充字段。例如,当用户在明细表中添加一行时,某个字段需要根据其他字段的值从数据库获取数据。这时需要编写SQL语句,可能需要用到当前行的某些值作为参数。例如,假设明细表有一个产品名称字段,需要根据产品ID自动填充,那么SQL可能需要类似SELECT product_name FROM products WHERE product_id = ?,并且参数来自当前行的某个字段,如product_id。但如何引用明细表中的字段呢?是否需要使用类似fieldID_i的格式,其中i是行索引? 字段赋值方面,可能需要将同一明细行中的其他字段值赋给当前字段。例如,当用户输入数量后,自动计算总价(数量乘以单价)。这时可能需要配置字段属性,设置赋值表达式,如总价 = 数量 * 单价。这里的字段可能需要在同一行内引用,使用类似$(fieldID)的语法,或者需要动态索引处理。 时间计算功能,例如计算两个日期字段之间的天数差。在明细行中,可能需要开始日期和结束日期,计算持续时间。同样,需要确认如何在明细行的字段属性中引用这两个日期字段,是否需要使用索引来指定同一行的其他字段。 另外,引用[3]中的校验方法提到,获取明细字段的值需要使用索引,如jQuery("#field62969_"+i).val(),其中i是行号。这可能意味着在字段属性的SQL或赋值表达式中,如果需要引用同一行的其他字段,也需要类似的动态处理,比如在SQL参数中使用当前行的字段值,可能需要通过变量或特定的占位符来表示当前行索引。 总结,用户需要了解如何为流程明细表中的字段配置字段属性,包括插入SQL、字段赋值和时间计算。需要详细说明每个功能的操作步骤,并注意明细字段的索引处理方式。可能还需要给出具体的例子,如如何为明细表的某个字段设置自动填充或计算,以及如何处理行索引的问题。 最后,根据用户的要求,生成相关问题,可能涉及如何动态获取明细字段的数据、如何处理多行明细的校验,或者如何优化流程设计中的明细表操作。</think>### 泛微OA流程明细字段属性功能使用说明 泛微OA中流程明细字段的字段属性功能主要用于动态处理明细表中的数据,通过数据库查询、字段间赋值和时间计算实现自动化操作[^2]。以下是具体使用方法: --- #### **一、功能入口** 1. 进入路径:`后端-流程引擎-路径管理` 2. 选择流程节点 → `流转设置` → `表单内容` → `显示模板` → 点击明细表字段后的`字段属性`按钮[^2]。 --- #### **二、核心功能及操作示例** 1. **插入SQL操作(从数据库读取数据)** - **场景**:根据明细字段的输入值自动填充其他字段。 - **示例**:若明细表中需根据“产品ID”自动填充“产品名称”: ```sql SELECT product_name FROM products WHERE product_id = #{明细字段ID} ``` - 需注意:明细字段引用需通过`#{字段ID}`格式,系统会自动匹配当前行的值。 2. **字段赋值(基于同行的其他字段)** - **场景**:自动计算明细行内的总价(数量×单价)。 - **配置方法**: - 目标字段:`总价` - 赋值公式:`数量 * 单价` - 需确保“数量”和“单价”为同一明细行的字段。 3. **时间计算(日期加减)** - **场景**:计算明细行中“开始日期”与“结束日期”的天数差。 - **配置方法**: - 目标字段:`持续天数` - 公式:`DATEDIFF(结束日期, 开始日期)` --- #### **三、注意事项** 1. **明细字段的动态索引** - 在代码或SQL中引用明细字段时,需通过`字段ID_行索引`格式(例如:`field123_0`表示第1行)[^3]。 - 行索引从`0`开始,总行数可通过`$G("indexnum0").value`获取。 2. **校验逻辑** - 提交时校验明细字段需遍历每一行,例如: ```javascript for (var i=0; i<rowCount; i++) { var value = $("#fieldID_"+i).val(); if (!value) Dialog.alert("第"+(i+1)+"行数据未填写!"); } ``` (需在`checkCustomize`函数中返回`false`阻止提交)[^3]。 --- #### **四、典型应用场景** 1. 采购流程中,根据明细行的“物料编号”自动填充规格和单价。 2. 报销流程中,计算明细行内“费用金额”的总和并赋值给主表字段。 3. 项目计划中,自动计算任务持续天数并校验日期合理性。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值