我有一个SELECT-Statement,其中必须映射键。我需要将此映射存储为数据库,因为此映射可以更改。由于映射条件仅基于一个键,因此相对简单。
SELECT
table.flield1 AS COL1
, (SELECT value from TransformationTable WHERE key = table.field2) AS COL2
[...]
现在我有一个映射条件更复杂的情况。在SQL中它就像:
CASE
WHEN table.field1 = 'ORG' AND table.field2 IN (1,2,3) THEN 01
WHEN table.field1 = 'ORG' AND table.field2 NOT IN (5,76,88) OR IN (9) THEN 02
WHEN table.field1 != 'ORG' AND table.field2 IN (1,2,3) THEN 03
END
如何在数据库中存储此类条件,以便我可以选择示例1中的值。
有人有想法吗?
答案 0 :(得分:0)
基本上要执行此任务,您需要能够动态评估表达式的内容。我过去解决这类问题的唯一方法是:
易于实现但灵活性较低:将表达式嵌入视图中,然后从视图中查询;将视图更改为映射表达式更改。请记住,视图只是存储的SQL语句,SQL语句可以包含和评估复杂表达式。
更难实现但更灵活:在某个表格中存储表达式的词法结构;然后读入"表达"并用它来动态生成SQL;然后运行动态生成的SQL。
玩得开心!!!
答案 1 :(得分:0)
如果你想要一个表格解决方案,那么我想到这样的事情:
PARENT | CHILD | LOGICAL | COLUMN | OPERATOR | VALUES | OUTPUT |
OPERATOR ID | OPERATOR ID | OPERATOR | (expression) | OPERATOR | VALUES | ATTRIBUTE |
--------------------------- ---------------------------------------------------------------
10001 | 10003 | AND | field1 | IN | 1,2,3 | 01 |
10001 | 10004 | AND | field2 | NOT IN | 5,76,88 | 01 |
10002 | 10005 | | field1 | IN | ... | 02 |
10002 | 10006 | | field2 | NOT IN | ... | 02 |
列PARENT OPERATOR ID
和CHILD OPERATOR ID
是额外的,以防您需要嵌套 AND-OR运算符( ... AND ( ... OR ... AND ( ... OR ... ) ) )