sql - 按公式计算由单个字符串组成,并用特殊符号分隔
问题描述
测试 DDL
with cte as (
select '0001' ID,1 InputValue,'Qty*2;Qty*5' Formulas union all
select '0002' ID,2 InputValue,'Qty+4;Qty/5' Formulas
)
select * into T from cte
--Query Data
ID ,InputValue ,Formulas
0001 ,1 ,Qty*2;Qty*5
0002 ,2 ,Qty+4;Qty/5
预期的
调用 somefunction 或 sqlquery 得到以下结果
ID ,InputValue ,Formulas ,Qty1 ,Qty2
0001 ,1 ,Qty*2;Qty*5 ,2 ,5
0002 ,2 ,Qty+4;Qty/5 ,6 ,0.4
逻辑
公式被截断;
inputvalue 使用第一个公式计算 qty1 字段
inputvalue 使用第二个公式计算 qty2 字段
我的测试
目前我的解决方案是使用C#编程来解决问题
using (var cn = Connection)
{
cn.Open();
var datas = cn.Query(@"
with cte as (
select '0001' ID,1 InputValue,'Qty*2;Qty*5' Formulas union all
select '0002' ID,2 InputValue,'Qty+4;Qty/5' Formulas
)
select * into #T from cte;
select * from #T;
");
var result = datas.Select(s => {
var arr = (s.Formulas as string).Split(';');
var qtyFor = arr[0].Replace("Qty", Convert.ToString(s.InputValue));
var qty1For = arr[1].Replace("Qty", Convert.ToString(s.InputValue));
var qty = new DataTable().Compute(qtyFor, string.Empty);
var qty1 = new DataTable().Compute(qty1For, string.Empty);
return new {s.ID,s.InputValue,s.Formulas,Qty=qty,Qty1=qty1};
});
Console.WriteLine(result);
/*
Result:
ID ,InputValue ,Formulas ,Qty1 ,Qty2
0001 ,1 ,Qty*2;Qty*5 ,2 ,5
0002 ,2 ,Qty+4;Qty/5 ,6 ,0.4
*/
}
在线测试链接
我知道这个表结构很奇怪,但这是一个没有源代码的旧系统,所以我无法修复表结构
解决方案
推荐阅读
- angular - *ngIf 和子组件
- sql-update - 使用嵌套选择语句更新查询 teradata
- wordpress - Woocommerce 特定简单产品的绝对折扣
- sql-server - 如何替换 SQL Server 中两个侧表中的相似内容?
- colors - 将透明 RGBA 值添加到现有 RGBA 值?
- regex - 即使电子邮件地址正确,电子邮件验证也无法在颤动显示消息中工作
- html - 我有一个轮播,它在桌面上一次显示 4 张图像。我希望在移动视图中一次只显示一张图像
- android - 如何在 android studio 中显示块体的自动完成建议以进行颤动?
- amazon-web-services - 静态 IP 地址
- python - numpy 中是否有“反向剪辑”功能?