如何在不使用 Sybase/Perl 中的游标的情况下从表/文件中的 2 行中获取结果集中的一行

Posted

技术标签:

【中文标题】如何在不使用 Sybase/Perl 中的游标的情况下从表/文件中的 2 行中获取结果集中的一行【英文标题】:How do I get one row in the result set out of 2 rows in the table/file without using cursors in Sybase/Perl 【发布时间】:2010-08-11 21:27:42 【问题描述】:

我有一个表 T,其中包含 A、B、C 和 D 列,如下所示:

A  B  C   D  
===============
A1 B1 USD LIBOR  
A1 B2 JPY FIXED  
A2 B3 USD LIBOR  
A2 B4 EUR FIXED  
A3 B5 JPY FIXED  
A3 B6 USD LIBOR   

    每个“A”表总是有 2 行,“B”的值不同。

    “B”是唯一的

    “A” - varchar(10)、“B” - varchar(8)、“C” - varchar(3)、“D” - varchar(5)

    验证规则将列限制为以下格式 - “A”、“B”、“D” - 字母数字 "C" - 字母

我需要从表格中提取以下结果 -

结果集 1:

A1 USD LIBOR JPY FIXED  
A2 USD LIBOR EUR FIXED  
A3 JPY FIXED USD LIBOR  

结果集 2:

USD LIBOR JPY FIXED  
USD IBOR  EUR FIXED

我希望避免使用游标,除非有其他解决方案。

我可以将此表提取到文件中并使用 perl 来获取结果吗?

请帮忙...

【问题讨论】:

啊,所以你没有LIST 功能。除非您可以在 Sybase 中创建用户定义的函数或聚合,否则从这个问题中看起来没有希望? ***.com/questions/491566/… 我必须从中提取的表有大约 100 列和数百万行。除了使用不是最佳解决方案的游标外,我还想尝试评估您建议的任何其他方法。甚至编写存储过程或函数也是可以接受的。 【参考方案1】:

它可以通过临时表和多次更新来完成,但我认为这在你的百万行表中不会很好。

如果您的数据总是每个“A”有 2 行,具有不同的“B”值,并且具有可预测的大小(列宽)或格式(因此您可以使用特殊的分隔符),那么这样的事情可能会起作用

SELECT A, MIN(B), MAX(B), right( MIN(B + C), 5), right( MIN(B + D), 5), right( MAX(B + C), 5), right(MAX(B + D), 5) FROM my_table GROUP BY A

【讨论】:

我已经尝试了上面的查询,但它需要很长时间,我不得不中止。我已将 4 列提取到临时表“my_table”中,并在 B 上使用索引来运行查询。 关于使用临时表和更新来实现这一点的任何建议。

以上是关于如何在不使用 Sybase/Perl 中的游标的情况下从表/文件中的 2 行中获取结果集中的一行的主要内容,如果未能解决你的问题,请参考以下文章

在函数中,如何在不使用 ref 游标的情况下返回多个值?

如何在不使用游标的情况下一次将查询结果分配给多个变量?

在不使用 SQL 游标的情况下插入行和更新表

在不使用循环但使用游标的情况下穿越 NSArray?

在不丢失 Html 样式的情况下更改 NSAttributedString 中的字体大小 - Swift

如何通过 AsyncTask 类或新线程进行游标查询? [复制]