想知道是否有人可以在这里帮助我一些SQL。我的任务是从遗留数据库系统中检索一些数据 - 它是运行v7.23C1的IBM Informix数据库。这可能是我在这里尝试做的很简单,但对于我的生活我无法理解。
我习惯于MS SQL Server,而不是任何其他数据库系统,而且这个系统看起来很旧:http://publib.boulder.ibm.com/epubs/pdf/3731.pdf(?)
基本上,我只想运行包含嵌套的查询,但我似乎无法弄清楚如何执行此操作。例如,我有一个如下所示的查询:
SELECT cmprod.cmp_product,
(stock.stk_stkqty - stock.stk_allstk) stk_bal,
stock.stk_ospurch,
stock.stk_backord,
'Current Sales Period',
'Current Period -1',
'Current Period -2',
cmprod.cmp_curcost,
stock.stk_credate,
stock.stk_lastpurch,
stock.stk_binref
FROM informix.stock stock,
informix.cmprod cmprod
WHERE stock.stk_product = cmprod.cmp_product
AND (cmp_category = 'VOLV'
OR cmp_category = 'VOLD'
OR cmp_category = 'VOLA')
AND stk_loc = 'ENG';
现在,基本上我有'当前期间-1'这样的值我希望包含一个嵌套字段,该字段将运行查询以获得给定日期范围内的销售额。我确信我可以将它们分开放在一起,但似乎无法使编译器在完全执行时对我的代码感到满意。
可能类似(NB,这个特定的查询是针对另一个专栏,但你明白了):
SELECT s.stmov_product, s.stmov_trandate, s.stmov_qty
FROM informix.stmove s
WHERE s.stmov_product = '1066823'
AND s.stmov_qty > 0
AND s.stmov_trandate IN (
SELECT MAX(r.stmov_trandate)
FROM informix.stmove r
WHERE r.stmov_product = '1066823'
AND r.stmov_qty > 0)
让事情变得更糟的是我无法访问运行此数据库的服务器。目前我有一个自定义C#应用程序,它通过ODBC驱动程序连接并执行原始SQL,将结果解析回.CSV。
任何和所有帮助表示赞赏!
答案 0 :(得分:2)
在任何情况下,Informix 7.23都是如此老套,以至于仍然无法运行它。目前尚不清楚这是OnLine(Informix Dynamic Server,IDS)还是SE(标准引擎)数据库。然而,7.23是Y2K认证的7.24版本之前的版本,所以它是15岁或左右,可能有点旧。
Informix服务器在7.23时代支持的语法不如当前版本那么全面。因此,你需要小心。你应该有服务器的手册 - 某人,你公司的某个地方应该。如果没有,您需要尝试在IBM Informix网页的墓地手册部分中找到它(从http://www.informix.com/开始以简化URL;但是,古老的手册需要一些发现,但您应该能够获得从http://pic.dhe.ibm.com/infocenter/ifxhelp/v0/index.jsp选择LHS中的“服务器”。
如果你想写:
SELECT ...
(SELECT ... ) AS 'Current - 1',
(SELECT ... ) AS 'Current - 2',
...
FROM ...
然后你需要研究7.23的服务器SQL语法来知道它是否被允许。 AFAICR,OnLine(Informix Dynamic Server)将允许它和SE可能不会,但这远非确定。我根本不记得古代版本的限制是什么。
根据7.2 Informix Guide to SQL: Syntax手册(1996年4月 - 17岁),您不能在此版本的Informix中的选择列表中添加(SELECT ...)
。
您可能必须创建一个包含所需结果的临时表(以及相应的密钥信息),然后从主查询中的临时表中进行选择。
这种事情是长时间不更新服务器的问题之一。
答案 1 :(得分:0)
很抱歉直言不讳,但是你可以通过缩短语法来至少怜悯我们吗?.. table.columns可以显示为AS别名。同时,如果您无法升级到较新版本的Informix,您将不得不依赖一个或多个SELECT INTO临时表查询来实现您的目标,即BTW,可以使您的编码在不同版本中更具可移植性。您还必须评估使用TEMP表是否意味着不可接受的处理时间。