金额合计求值(返回总计值为指定数的集合)

本文介绍了一个SQL查询函数,用于在数据库表中查找单独或组合记录的金额是否与给定的目标金额相等。通过递归查询的方式实现了金额的精确匹配。

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

表test中记录:
  aa     bb 
  001   50.5
  002   60
  003   15.4
  004   25
  005   48
  ...

输入任一金额,然后在表中查找是否有该金额或几条记录的合计等于该金额.
如:输入25,则要找出004,输入85,则要找出002与004,依次类推。
------------------------------------------------------------------------------------


--测试数据
create table test(aa varchar(10),bb numeric(10,2))
insert test select '001',50.5
union  all  select '002',60
union  all  select '003',15.4
union  all  select '004',25
union  all  select '005',48
union  all  select '006',37
go

--查询函数
create function fn_search(@Num numeric(10,2))
returns @r table (aa varchar(10),bb numeric(10,2))
as
begin
 declare @t table (aa varchar(8000),aa1 varchar(10),bb numeric(10,2),level int)
 declare @l int

 insert @r select aa,bb from test where bb=@num
 if @@rowcount>0 goto lb_exit

 set @l=0
 insert @t select ','+aa+',',aa,bb,@l from test where bb<@num
 while @@rowcount>0
 begin
  insert @r select distinct a.aa,a.bb
  from test a,(
   select a.aa,a.bb,aa1=b.aa from test a,@t b
   where b.level=@l
    and b.aa1<a.aa
    and a.bb=@num-b.bb
  )b where a.aa=b.aa or charindex(','+a.aa+',',b.aa1)>0
  if @@rowcount>0 goto lb_exit

  set @l=@l+1
  insert @t select b.aa+a.aa+',',a.aa,a.bb+b.bb,@l
  from test a,@t b
  where b.level=@l-1
   and b.aa1<a.aa
   and a.bb<@num-b.bb
 end

lb_exit:
 return
end
go

--调用测试1
select * from dbo.fn_search(25)

/*--结果

aa         bb          
---------- ------------
004        25.00

(所影响的行数为 1 行)
--*/

--调用测试2
select * from dbo.fn_search(135.5)

/*--结果

aa         bb          
---------- ------------
001        50.50
002        60.00
004        25.00
005        48.00
006        37.00

(所影响的行数为 5 行)
--*/

--调用测试3(找不到的,无返回值)
select * from dbo.fn_search(135.7)

/*--结果
aa         bb          
---------- ------------

(所影响的行数为 0 行)
--*/
go

drop table test
drop function fn_search

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zjcxc/archive/2004/08/06/67518.aspx

<template> <el-table :data="tableData" style="width: 100%"> <el-table-column type="selection" width="55"/> <el-table-column label="产品名称" width="220"> <template #default="scope"> <div class="product-name-wrapper"> <el-link type="primary" :underline="false" @click="goToProductDetail(scope.row.id)"> <span >{{ scope.row.name }}</span> <span style="color: brown;" >※点击进入详细画面</span> </el-link> </div> </template> </el-table-column> <el-table-column property="categoryName" label="产品分类"width="120"/> <el-table-column property="price" label="产品单价"width="120"/> <el-table-column property="createAt" label="生产日期"width="250"/> <el-table-column property="price" label="单价"width="120"/> <el-table-column property="stock" label="库存"width="120"/> <el-table-column label="购买量" width="180"> <template #default="scope"> <div class="quantity-control"> <el-input-number v-model="scope.row.number" :min="0" :max="scope.row.stock" size="small" controls-position="right" @change="handleQuantityChange(scope.$index,scope.row)" /> </div> </template> </el-table-column> <el-table-column label="合计" width="120"> <template #default="scope"> {{ formatCurrency(scope.row.price * scope.row.number) }} </template> </el-table-column> <el-table-column label="操作" width="180"> <template #default="scope"> <el-button size="small" @click="handleEdit(scope.$index,scope.row)"> 编辑 </el-button> <el-button size="small" type="danger" @click="handleDelete(scope.$index,scope.row)"> 删除 </el-button> </template> </el-table-column> </el-table> </template> <script setup> const router = useRouter(); const user = "aaa" import productApi from '@/api/products' import { ref } from 'vue'; const goToProductDetail = (productId) => { router.push(`/home/test${productId}`) } const handleEdit = (index, row) => { console.log(index, row) } const handleDelete = (index, row) => { console.log(index, row) } // 处理量变化事件 const handleQuantityChange = (index, row) => { console.log(`产品 ${row.name} 量更新为: ${row.number}`); // 这里可以添加更新合计金额的逻辑 } const formatCurrency = (value) => { const numValue = parseFloat(value); // 先转换为字 if (isNaN(numValue)) { return '¥0.00'; } return `¥${Math.abs(numValue).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')}`; }; //商品一览 function getProduct() { productApi.getAll(user).then(res => { tableData.value = res.data; }) } onMounted(() => { getProduct(); }) const tableData = ref(); </script> <style scoped> .aaa-tag { display: inline-block; background-color: #409eff; color: white; font-size: 12px; padding: 0 4px; border-radius: 3px; margin-right: 5px; } </style> 删除按钮按下删除这一行
最新发布
07-11
### 去重后的订单量和总金额的 SQL 查询 为了计算去重后的订单量和总金额,可以结合 `DISTINCT` 和 `SUM` 函来实现。以下是具体的解决方案: #### 1. 使用 `COUNT(DISTINCT ...)` 统计唯一订单 可以通过 `COUNT(DISTINCT column_name)` 来统计唯一的订单量。此方法会自动去除重复的订单记录并返回唯一的订单。 #### 2. 使用 `SUM(...)` 统计总金额 对于总金额的计算,可以直接使用 `SUM(column_name * another_column_name)` 的方式,其中涉及乘法运算的部分可以根据实际需求调整。 综合以上两点,假设有一个名为 `OrderItems` 的,包含以下字段: - `order_id`: 订单ID - `item_price`: 商品单价 - `quantity`: 商品量 那么完整的 SQL 查询语句如下所示: ```sql SELECT COUNT(DISTINCT order_id) AS unique_orders, SUM(item_price * quantity) AS total_amount FROM OrderItems; ``` 上述查询中: - `COUNT(DISTINCT order_id)` 负责统计唯一订单的量[^2]。 - `SUM(item_price * quantity)` 则用于计算所有商品总价[^1]。 如果数据源是一个更复杂的场景,例如需要按日期或其他条件分组,则可以在查询中引入额外的过滤器或聚合逻辑。例如基于引用中的另一个例子[^4],我们可以扩展到每日订单量统计的情况: ```sql SELECT Date, COUNT(DISTINCT Order_id) AS daily_unique_orders, SUM(amount) AS daily_total_amount FROM STG.ORDER GROUP BY Date; ``` 这段代码实现了按照日期维度分别统计每天的唯一订单和当天的总交易额。 --- #### 注意事项 当处理大数据集时,应确保索引优化得当以提高性能;另外还需注意可能存在的 NULL 影响最终结果准确性。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值