每行多个数据行列

时间:2012-12-19 21:34:35

标签: sql birt

我正在尝试从数据集中显示单个列,但是在一行中展开。例如:

[Row1] [Row2] [Row3]
[Row4] [Row5] [Row6]

而不是:

[Row1]
[Row2]
[Row3] etc.

数据集需要基于外表中的列与另一个表连接,这意味着,AFAIK,交叉表是不可能的,因为您不能使用数据集参数。单个数据集中的行数没有限制,但我希望每行有3行。

我可以修改数据集查询但是我只能在这些查询中使用普通的旧SQL,除了在服务器端创建临时表或创建任何“新”之外 - 然而,仅BIRT解决方案会更合适。

1 个答案:

答案 0 :(得分:1)

如果您可以将查询更改为输出

1 1 [Row1]
1 2 [Row2]
1 3 [Row3]
2 1 [Row4]
2 2 [Row5]
2 3 [Row6]

进入临时表tmp,然后您可以使用类似

的内容查询
select col1, col3 from tmp into tmp1 where col2 = 1;
select col1, col3 from tmp into tmp2 where col2 = 2;
select col1, col3 from tmp into tmp3 where col2 = 3;
select tmp1.col3, tmp2.col3, tmp3.col3 from tmp1, tmp2, tmp3 where tmp1.col1 = tmp2.col1 and tmp1.col1 = tmp3.col1;

您可以使用col1生成col2rownum,但它是非标准的,并且需要正确排序原始查询的输出。

修改

如果你不能使用临时表,我假设你可以使用子查询:

select tmp1.col3, tmp2.col3, tmp3.col3 from
  (select col1, col3 from (ORIGINAL_QUERY) where col2 = 1) as tmp1,
  (select col1, col3 from (ORIGINAL_QUERY) where col2 = 2) as tmp2,
  (select col1, col3 from (ORIGINAL_QUERY) where col2 = 3) as tmp3
where tmp1.col1 = tmp2.col1 and tmp1.col1 = tmp3.col1;

并希望优化器很聪明。