نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
سلام به همه
جدول دیتابیس ما به این شکل است
نام | ماه | نمره
حالا اگه قرار باشه ما نمرات را در یک دیتاگرید ویو که به تعداد ماههای مهر تا خرداد را دارد نمایش دهیم یعنی :
نام | مهر | آبان | ....................
آیا لازم است کوری را در دیتابیس ایجاد کنیم یا اینکه با یک کوری در خود برنامه هم می توان این کار را کرد ؟
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
بهترین و سریع ترین راه اینکه از PIVOT در SQL استفاده کنی
اینم یه مثال
http://blog.sqlauthority.com/2008/06...able-examples/
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
اما من چیزی ازش سر در نیاوردم :گریه:
می شه با یه تکه کد نشون بدین :متفکر:
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
سلام. سوالتون رو بیشتر توضیح بدید تا دوستان راه درست رو پیشنهاد کنن. (منظور از نام چیه؟).
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
ممنونم از تذکرتون
ببینین ما نام دانش آموزان یه کلاس رو در یک ستون ونمراتشون رو در یک ستون
وماه مربوطه رو در یک ستون دیتابیس ( حالا هر نوعی که می خواد باشه ) وارد می کنیم
بعد می خواهیم در دیتا گرید نام دانش آموزان در یک ستون و نمرات آنها به تفکیک ماه نشون بدیم
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
به عنوان مثال این کد برای نشان دادن میانگین یه تعداد اطلاعات از یک ستون رو چگونه می توانیم تغییر دهیم تا چیزی که می خواهیم به دست بیاد
static void Main(string[] args)
{
string cs = @"Data Source=<your server>;Initial Catalog=<your database>;Integrated Security=SSPI";
try
{
using (SqlConnection con = new SqlConnection(cs))
{
con.Open();
string sql = "select * from DailyIncome pivot (avg (IncomeAmount) for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as AvgIncomePerDay";
SqlDataAdapter da = new SqlDataAdapter(sql, con);
DataTable dt = new DataTable("AverageIncomeForVendor");
da.Fill(dt);
// Bind the DataTable to whatever, just displaying it in console here.
int colCount = dt.Columns.Count;
foreach (DataRow row in dt.Rows)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < colCount; i++)
{
sb.Append(row[i].ToString() + "\t");
}
Console.WriteLine(sb.ToString());
}
con.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
دستور order by رو جستجو کنید . کار این دستور اینه که رکوردها رو براساس معیار خاص ( مثلا نام ماه) مرتب میکنه.
select name,mah,nomre from tblnomre order by mah
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
نقل قول:
نوشته شده توسط
veniz2008
دستور order by رو جستجو کنید . کار این دستور اینه که رکوردها رو براساس معیار خاص ( مثلا نام ماه) مرتب میکنه.
select name,mah,nomre from tblnomre order by mah
این دستور واسه مرتب کردنه اطلاعات براساس ماه می باشد نه برای جدا کردن :عصبانی++::گریه:
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
اگر میخواید براساس ماه جدا (دسته بندی) کنید از group by استفاده کنید.
امیدوارم منظورتون رو درست متوجه شده باشم.
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
میشه همینی که گفتین رو با یه تکه کد نشون بدین ؟
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
select studentid,name,mah,nomre from tblnomre group by studentid
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
حالا خروجی این دستور چی می شه ؟
یعنی در دیتا گرید ویو یک ستون نام دانش آموزان و چند ستون از نمرات برای هر ماه به طور مجزا ایجاد می شه ؟؟؟؟؟؟؟؟؟؟
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
نقل قول:
نوشته شده توسط
mahtab.kamali
حالا خروجی این دستور چی می شه ؟
یعنی در دیتا گرید ویو یک ستون نام دانش آموزان و چند ستون از نمرات برای هر ماه به طور مجزا ایجاد می شه ؟؟؟؟؟؟؟؟؟؟
نه . دستور group by فقط داده ها رو دسته بندی میکنه. یعنی شکل ظاهری همونی هست که درون جدول ذخیره شدن.
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
پس با این حساب راهی نداره دیگه
لطفا یه نفر راهنمایی کنه :گریه:
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
کسی می دونه چطور می شه از این کد استفاده کرد
public static DataTable Pivot(DataTable dataValues, string keyColumn, string pivotNameColumn, string pivotValueColumn)
{
DataTable tmp = new DataTable();
DataRow r;
string LastKey = "//dummy//";
int i, pValIndex, pNameIndex;
string s;
bool FirstRow = true;
pValIndex = dataValues.Columns[pivotValueColumn].Ordinal;
pNameIndex = dataValues.Columns[pivotNameColumn].Ordinal;
for (i = 0; i <= dataValues.Columns.Count - 1; i++)
{
if (i != pValIndex && i != pNameIndex)
tmp.Columns.Add(dataValues.Columns[i].ColumnName, dataValues.Columns[i].DataType);
}
r = tmp.NewRow();
foreach (DataRow row1 in dataValues.Rows)
{
if (row1[keyColumn].ToString() != LastKey)
{
if (!FirstRow)
tmp.Rows.Add(r);
r = tmp.NewRow();
FirstRow = false;
//loop thru fields of row1 and populate tmp table
for (i = 0; i <= row1.ItemArray.Length - 3; i++)
r[i] = row1[tmp.Columns[i].ToString()];
LastKey = row1[keyColumn].ToString();
}
s = row1[pNameIndex].ToString();
if (!tmp.Columns.Contains(s))
tmp.Columns.Add(s, dataValues.Columns[pNameIndex].DataType);
r[s] = row1[pValIndex];
}
//add that final row to the datatable:
tmp.Rows.Add(r);
return tmp;
}
1 ضمیمه
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
سلام
با هزار ویک مصیبت این کد رو واسه PIVOT پیدا کردیم که اون هم این ارور رو می ده
string query = "select userid,[1] as mehr,[2] as aban,[3] as azar,[4] as daey,[5] as bahman,[6] as esfand,[7] as parvardin,[8] as ordiebehesht,[9] as khordad"+
"from"+
"(select userid,[month],score from pivt)"+
"piv pivot(sum(score) for [month] in ( [1],[2],[3],[4],[5],[6],[7],[8],[9])) as chld"+
"order by userid";
علتش چی می تونه باشه ؟؟؟؟؟؟؟؟؟؟؟؟
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
با سلام
یه دونه کام بعدازآخرین پارامتر اضافه گذاشتین :قهقهه::قهقهه::قهقهه:
اما اگه اونم بردارین بازم ایراد می گیره می کی نه امتحان کن
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
به نظر من با این روش خودتو خسته می کنی چون دیتابیس شما اکسس هست بعیده که ........
به جای اینکه خودتو خسته کنی وندای " هل من ناصر " سر بدی
یه متد با حلقه for تعریف کن وستونهای دیتابیست رو با اون متد سازماندهی کن
حتی می تونی جدولت رو بچرخونی یعنی ستون رو به ردیف و ردیف رو به ستون بدل کنی :لبخند:
اینطوری :
public DataTable PivotTable(DataTable source)
{
DataTable dest = new DataTable("Pivoted" + source.TableName);
dest.Columns.Add(" ");
foreach (DataRow r in source.Rows)
dest.Columns.Add(r[0].ToString());
for (int i = 0; i < source.Columns.Count - 1; i++)
{
dest.Rows.Add(dest.NewRow());
}
for (int r = 0; r < dest.Rows.Count; r++)
{
for (int c = 0; c < dest.Columns.Count; C++)
{
if (c == 0)
dest.Rows[r][0] = source.Columns[r + 1].ColumnName;
else
dest.Rows[r][c] = source.Rows[c - 1][r + 1];
}
}
dest.AcceptChanges();
return dest;
}
نقل قول: نمایش یکستون از دیتابیس در چند ستون دیتا گرید ویو
با سلام مجدد
از انجا که ساینتیکس کوری PivotTable ما بین sql و oledb متفاوت می باشد بنابراین شما دستور سلکتتون رو به هر شکلی که
بنویسید ایراد ساینتیکس خواهد گرفت زیرا در jet هنگام تعریف کوئری Pivot ملزم هستید به استفاده از TRANSFORMواین
قسمت از کد همیشه قبل از sum وبعد از پارامتر ها باید نوشته شوددر غیر این صورت با پیغام
Syntax error in FROM clause"
مواجه می شوید