Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Có câu lệnh SQL nào sẽ chia những gì sẽ có 2 cột dài thành nhiều cặp cột không?

Phần thưởng cho điều này là nếu bạn kết thúc với nhiều dữ liệu hơn, nó sẽ chỉ tạo thêm các cột ngang nếu cần nhưng không bao giờ vượt quá 12 hàng dữ liệu. Cách "in-SQL" sẽ yêu cầu thay đổi mã nếu bạn cần hiển thị thêm dữ liệu.

Tuyên bố từ chối trách nhiệm :Điều này hoàn toàn không đúng (C # vì đó là những gì tôi đã từng làm). Có lẽ có nhiều cách tốt hơn để làm điều này (Linq?) Logic phải khá chặt chẽ, nhưng điều này cho phép bạn sử dụng danh sách dữ liệu đó cho các mục đích khác một cách linh hoạt hơn so với cách hiển thị tập trung rất hẹp này.

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!

Phiên bản ALTERNATE :Đối với yêu cầu rằng val1 ==48 đi vào ô 48 (xem nhận xét)

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!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật truy vấn trong khi tham gia hai bảng?

  2. Nhận oracle.jdbc.driver.LogicalConnection, cần oracle.jdbc.OracleConnection

  3. Cách tốt nhất để chạy các truy vấn Oracle định kỳ

  4. cách chọn giá trị not-null từ Oracle (phương pháp tối ưu hóa)

  5. Nhà tiên tri. Làm thế nào để xuất ngày và giờ?