Sql 返回的VAL显示在12行中?注意,返回的数据是正确的,我只需要空/空单元格“离开”-将填充的“单元格”拉到顶部。 Val1 Val2 ---- ---- 1 2 2 [blank] 3 2 4 5 1 6 3 .. 96
Sql 返回的VAL显示在12行中?注意,返回的数据是正确的,我只需要空/空单元格“离开”-将填充的“单元格”拉到顶部。 Val1 Val2 ---- ---- 1 2 2 [blank] 3 2 4 5 1 6 3 .. 96 ,sql,oracle,select,nested,Sql,Oracle,Select,Nested,返回的VAL显示在12行中?注意,返回的数据是正确的,我只需要空/空单元格“离开”-将填充的“单元格”拉到顶部。 Val1 Val2 ---- ---- 1 2 2 [blank] 3 2 4 5 1 6 3 .. 96 1 Val1 Val2 Val1 Val2 Val1 Val2 ... Val1 Val2 ---- ---- ---- ---- ---- ---- 1 2 1
返回的VAL显示在12行中?注意,返回的数据是正确的,我只需要空/空单元格“离开”-将填充的“单元格”拉到顶部。
Val1 Val2
---- ----
1 2
2 [blank]
3 2
4
5 1
6 3
..
96 1
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
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
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
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
//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;
}
SELECT ... FROM
(SELECT v1,v2,rownum as rn FROM Foo WHERE mod(rownum,2)=1) t1
INNER JOIN (SELECT v1,v2,rownum as rn FROM Foo WHERE mod(rownum,2)=0) t2
ON (t1.rn/2 = t2.rn/2)
select val1 AS col1, val2 AS col2,NULL AS Col3,NULL AS Col4 ,NULL AS Col5,NULL AS Col6,NULL AS col7,NULL AS Col8 from dbtable where val1 < 13
UNION
select NULL AS col1,NULL AS col2 ,val1 AS Col3, val2 AS Col4,NULL AS Col5,NULL AS Col6,NULL AS col7,NULL AS Col8 from dbtable where val1 > 12 and val1 < 25
UNION
select NULL AS col1,NULL AS col2 ,NULL AS Col3, NULL AS Col4,val1 AS Col5,val2 AS Col6,NULL AS col7,NULL AS Col8 from dbtable where val1 > 25 and val1 < 37
.....
...AND So ON
DataTable dt = ResultsFromSproc();
DataTable outputDt = new DataTable();
//prebuild 12 rows in outputDt
int iRows = 12;
while(iRows > 0) {
outputDt.Rows.Add(new DataRow());
iRows-=1;
}
int outputColumn = 0;
for(int i = 0; i < dt.Rows.Count; i+=1){
DataRow dr = dt.Rows[i];
if(i % 12 == 0 && i > 0) {
//add two more columns to outputDt
outputDt.Columns.Add() //Not sure but you might need to give it a name. (outputColumn+2).ToString() should work
outputDt.Columns.Add() //Not sure but you might need to give it a name. (outputColumn+3).ToString() should work
outputColumn += 1;
}
outputDt.Rows[i%12][outputColumn] = dr[0];
outputDt.Rows[i%12][outputColumn + 1] = dr[1];
}
//Step2: Bind to outputDt. Step 3: Profit!
DataTable dt = ResultsFromSproc();
DataTable outputDt = new DataTable();
//prebuild 12 rows in outputDt
int iRows = 12;
while(iRows > 0) {
outputDt.Rows.Add(new DataRow());
iRows-=1;
}
int outputColumn = 0;
int iMaxCell = (int)dt.Select("MAX(Val1)")[0][0];
//ASSUMING YOU HAVE ALREADY DONE AN ORDER BY Val1 in SQL (if not you need to sort it here first)
for(int i = 0; i < iMaxCell; i+=1){
DataRow dr = dt.Rows[i];
if(i % 12 == 0 && i > 0) {
//add two more columns to outputDt
outputDt.Columns.Add() //Not sure but you might need to give it a name. (outputColumn+2).ToString() should work
outputDt.Columns.Add() //Not sure but you might need to give it a name. (outputColumn+3).ToString() should work
outputColumn += 2;
}
//compare to i+1 if your data starts at 1
if((int)dr[0] == (i+1)){
outputDt.Rows[i%12][outputColumn] = dr[0];
outputDt.Rows[i%12][outputColumn + 1] = dr[1];
}
}
//Step2: Bind to outputDt. Step 3: Profit!