我们有2个表格,如下所示:
表1 :
call c1 c2
---- -- --
c001 a 10
c001 a 11
c001 b 13
c001 b 25
表2 :
call description symbol limit
---- ----------- ------ -----
c001 Gain > 10
c002 loss < 1
c003 safe = 0
我正在尝试编写一个存储过程,我们可以在其中传递符号和限制以获取结果。
SELECT
t1.call, t1.c1, (t1.C2 - t2.C2)
CASE ( MOD(t1.c2-t2.c2) t3.symbol (select t3.limit from table2 t3), 'FAIL', 'PASS') STATUS
FROM
table1 t1, table1 t2
WHERE
t1.C1 = t2.C1 AND t3.call = t1.call
结果看起来像这样:
call c1 c2 STATUS
---- -- -- ------
C001 a 1 FAIL
C001 b 12 PASS
请协助。
答案 0 :(得分:1)
您可以使用另一级case表达式来确定要使用的符号:
type NotAFunction = string | number | boolean | null | undefined | { call?: NotAFunction };
declare function nonPrimitiveResult(): { then?: NotAFunction } | Promise<object>;
但是重复的次数很大,因此,如果要处理的符号过多,至少对于可维护性而言,缩放效果不好。
更笼统地说,如果您不太了解,则可以通过XML类型通过一种动态评估来弹跳:
{then?: never}
或者您可以使用动态SQL,构建类似的字符串来运行和评估。
无论哪种方式,这都是痛苦而尴尬的,因此您可能希望查看其他捕获业务规则的方式。
我还不得不猜测,您可以根据一个较大的行来决定从另一个行中减去两个行。但这还假设它们不能相等-如果它们可以相等,则联接条件将根本找不到它们(如果更改联接条件,它将使行与它们自己匹配,因此必须检查也可以使用不同的行ID。