我的数据在“正常”查询中会如下所示:
Val1 Val2
---- ----
1 2
2 [blank]
3 2
4
5 1
6 3
..
96 1
不过,我想要的是这样的(我需要将行数限制为 12):
Val1 Val2 Val1 Val2 Val1 Val2 ... Val1 Val2
---- ---- ---- ---- ---- ----
1 2 13 1 25 [blank] ... 85 1
2 [blank] 14 1 26 3 ... 86 [blank]
.. ... ... ... ... ... ... ... ...
12 1 24 [blank] 36 2 ... 96 3
是否有一个选择语句可以给我?我不是 SQL 专家,但我在想一些事情(语义上)沿着这些思路:
select (select val1, val2 from dbtable where val1 < 13),
(select val1, val2 from dbtable where val1 > 12 and val1 < 25),
...
(select val1, val2 from dbtable where val1 > 84)
from dbtable
更新
响应 dfb 的 sql 示例:
当我这样做时:
SELECT t1.Val1, t1.Val2 FROM
(SELECT Val1, Val2, rownum() as rownum FROM dbTable) t1
INNER JOIN (SELECT Val1, Val2, rownum() as rownum FROM dbTable) t2
ON t1.rownum/2 == t2.rownum/2
...我得到“未在预期的地方找到 FROM 关键字”
当我这样做时(删除“rownum()”的东西):
SELECT t1.Val1, t1.Val2 FROM
(SELECT Val1, Val2 FROM dbTable) t1
INNER JOIN (SELECT Val1, Val2 FROM dbTable) t2
ON t1.rownum/2 == t2.rownum/2
...我收到“ORA-01747:无效的 user.table.column、table.column 或列规范”
更新 2
Sully 的例子是最接近的,虽然我希望 UNION SQL 能够工作——如果它可以在不压低有效值的情况下完成会更好。事实上,我有正确的布局,但 val 并没有出现在 16X12 布局中我需要它们的位置。无论如何,为了后代的缘故,下面是动态创建行和列的方式(不像下面的代码所示,并且彼此不完全相同):
//prebuild 12 rows in outputDt
int iRows = 12;
while (iRows > 0)
{
DataRow row = outputDt.NewRow();
outputDt.Rows.Add(row);
iRows -= 1;
}
//prebuild 16 cols in outputDt
int iCols = 16;
while (iCols > 0) {
DataColumn col = new DataColumn();
outputDt.Columns.Add(col);
iCols -= 1;
}
最后更新
得到它的工作。请参阅是否可以使用交替的垂直列填充 DataGridView?