Oracle SQL - 是否有更有效的方法来组织大规模的case语句

时间:2012-06-22 11:09:06

标签: sql oracle case space-efficiency

目前我有一份报告,查看不同类型的文件。每个文档都有一个指定的时间表,它应该完成(即2天,4天等)。有超过100种类型的文件。目前,每个文档的分配时间刻度保存在Excel电子表格中,并使用vlookup公式(基于评估ID)与excel中的数据匹配。遗憾的是,我们的数据库中没有地方可以放置这个指定的时间刻度,但我希望能够从数据库运行报告并将其发送给用户,而无需在Excel中进行额外的操作。我知道我可以通过写一个大规模的案例陈述来实现这一目标(以下只是一个例子)

SELECT
ID,
CASE WHEN ID = 1 then '1 day' 
WHEN ID = 2 then '42 days'
WHEN ID = 3 then '16 days'
ELSE 'CHECK' end as 'Timescale'
FROM TABLE1

但我确实想知道在SQL中是否有更有效的方法(除了请求数据库中的其他字段来记录这个!)?可能没有,但认为值得问!感谢。

2 个答案:

答案 0 :(得分:5)

如果您有100个不同的时间表,那么将TIMESCALE表添加到您的数据库并放弃在电子表格中存储对您的业务非常重要的信息是合理的。没有什么比Excel,精美的产品,我最好的朋友都是Excel电子表格 - 但我不会在其中存储关键业务信息。

分享并享受。

答案 1 :(得分:0)

所以你想在Oracle表和excel表之间加入......

我认为这并非完全不可能。有两种方法。

方式1.您可以在Oracle中进行加入。这意味着您必须编写可以读取Excel工作表的Java存储过程。下一步是创建PL / SQL包装器以包装此Java存储过程。之后,您可以编写一个通过PL / SQL包装器调用Java存储过程的SQL语句,此SQL语句可以与您的Oracle表进行连接。

确实,这非常复杂。

方式2.我认为您可以通过ODBC从Excel工作表连接到Oracle。应该可以在excel中从Oracle获取数据。所以excel可以为你加入。

确实,这非常复杂。

您还可以将这些额外数据放在新的Timescale表中(如Bob Jarvis建议的那样),但您必须在excel表和Oracle表之间进行同步。

您还可以将所有数据移至Oracle。或者你可以将所有数据移到excel(可能不是)?