Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

क्या कोई SQL कथन है जो 2 लंबे स्तंभों को स्तंभों के कई जोड़े में तोड़ देगा?

इसके लिए बोनस यह है कि यदि आप अधिक डेटा के साथ समाप्त होते हैं, तो यह आवश्यकतानुसार अधिक क्षैतिज कॉलम बनाएगा, लेकिन डेटा की 12 पंक्तियों से अधिक कभी नहीं जाएगा। यदि आपको कभी भी अधिक डेटा प्रदर्शित करने की आवश्यकता हो तो "इन-एसक्यूएल" तरीके में कोड परिवर्तन की आवश्यकता होगी।

अस्वीकरण :यह पूरी तरह से ऑफ-द-कफ है (सी # जैसा कि मैं इसका उपयोग कर रहा हूं)। ऐसा करने के लिए शायद बहुत बेहतर तरीके हैं (लिंक?) तर्क बहुत करीब होना चाहिए, लेकिन यह आपको डेटा की उस सूची का उपयोग अन्य उद्देश्यों के लिए इस बहुत ही संकीर्ण रूप से केंद्रित प्रदर्शन की तुलना में लचीलापन देता है।

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!

वैकल्पिक संस्करण :आवश्यकता के लिए कि val1 ==48 सेल 48 में जाता है (टिप्पणियां देखें)

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. Oracle Sql अवैध वर्ष

  2. oracle तत्काल निष्पादित करता है बिना किसी त्रुटि के निष्पादित नहीं करता है

  3. डुप्लिकेट रिकॉर्ड होने पर उसी तालिका के कॉलम को अपडेट करें

  4. Oracle पिछली बार डाली गई पहचान को पुनः प्राप्त करें

  5. Statement.execute () PL/SQL के अंत में स्लैश के साथ त्रुटि देता है