SQL循环 - 将三维数据组织到二维表中

时间:2014-03-05 22:26:31

标签: sql dynamic while-loop

我在VBA中相当流利,但只在SQL中编写了基本的条件选择语句。我有一个静态表,STFile,有大约900列。它每天快照一次实时表格,以创建历史记录。

ST...Date….ST1_PROD…ST1_PCT 1…ST1_PCT 2…ST2_PROD…ST2_PCT 1…ST2_PCT 2…etc.
AA..3/5/14.141……...…..0.8………..…..0.2……...…..142……...…...0.95……..…..0.05……..…..
BB..3/5/14.010……....…..1……..…..…..0……......…..141……...…...0.8……..…....0.2……..…..
CC..3/5/14.141……...…..0.8………..…..0.2……...…..142……...…...0.95……….…..0.05……..…..

有35种不同的ST,120种产品(010,141等),以及它们可能属于的128种不同的色谱柱组(每种产品的PROD,PCT 1,PCT 2的集合)。

我做了什么:一个查询,它返回一列中一个产品的所有信息。我导出了所有'PROD'列并使用VBA和excel使用条件的when / then select语句编写了1000行长暴力查询。

问题:跑步表每天都有变化。如果我们从BB删除prod 10,则列引用为所有后续列移位ST3_PROD - > ST2_PROD,ST2_PROD - > ST1_PROD等。现在,每列包含有关不同产品的数据。

我的第一个想法:暴力查询。检查每个ST的每个产品的每个合适的列的值。但是,ST = 35 * Prod = 120 * Cols = 128 = = 540,000行查询,只是为了返回prod名称,更不用说整组数据...

我想要的是:一个循环,它检查每列的值,然后在找到产品名称时返回该列。如果我有一个正常运行的循环,我可以简单地用我的产品创建一个数组,并进行动态查询。使用新产品更新列表就像将产品添加到数组中一样简单!

那么......任何帮助?

P.S。对数据表感到抱歉。我的第一个帖子=无法发布图片!按句点分隔的列。

1 个答案:

答案 0 :(得分:0)

我能够通过嵌套在一个嵌入游标for循环的while循环中的while循环来完成它。

"它"正在查询具有严格和通用列名称的表,但是可能在不同日期的不同列中的数据。它本质上是一个打包到二维表中的三维数据存储器。由于我无法更改父表本身,因此我的查询会将数据重新组织为可用且合理的格式。

我首先将1天的数据提取到临时表中,因此我只能通过36行数据(而不是数万行)筛选900列,这大大减少了查询时间。然而,它仍然需要大约8-9秒才能运行。如果有一种更有效的方法来实现这一目标,我全心全意。

这是工作小提琴: http://sqlfiddle.com/#!3/d41d8/31576