PDA

View Full Version : سوال: نمایش اطلاعات تکراری یک فیلد در دیتاگرید



pedramfj
دوشنبه 10 مرداد 1390, 15:56 عصر
سلام
یک جدول به نام tb1 دارام که دارای فیلد های نام کتاب ,کد کتاب , تعداد , تاریخ فروش , است .(کد کتاب کلید اصلی است).
این جدول حاوی اطلاعات کتاب های فروخته شده می باشد.
می خواهم کاری کنم که وقتی کاربر دو تاریخ را انتخاب کرد تعداد و نام کتاب و ... کتاب های فروخته شده بین این دو تاریخ لیست شود(تا اینجا مشکلی نیست).
در زمان نمایش در دیتا گرید می خواهم مثلا بگوید کتابی با چنین نام و کدی بتعداد 20 تا درکل فروخته شده است.برای هر کد کتاب این کار را انجام دهد .برای هر کد کتاب یک ردیف در دیتاگرید ایجاد کند.(امیدوارم توانسته باشم منظورم را واضح بیان کنم).
تشکر...

morteza271
دوشنبه 10 مرداد 1390, 16:58 عصر
با توجه به اینکه کد کتاب کلید اصلی شما هست پس کوئری زیر همونی که میخواین رو نتیجه میده :
select code,naem,count
from tblBook
where date between '1390/01/01' and '1390/05/10'
موفق باشید.

Reza_Yarahmadi
دوشنبه 10 مرداد 1390, 17:24 عصر
در صورت استفاده از SQL Server 2005 به بالا میتونید بصورت زیر عمل کنید
;With Res as(
Select
BookCode,
SUM(SellCount) as TotalSelling
From
TableName
Where
SellDate Between @Date1 AND @Date2
Group By
BookCode)
Select
T.*,
R.TotlaSelling
From
TableName T Inner Join Res R
ON
T.BookCode = R.BookCode

pedramfj
دوشنبه 10 مرداد 1390, 17:25 عصر
با توجه به اینکه کد کتاب کلید اصلی شما هست پس کوئری زیر همونی که میخواین رو نتیجه میده :
select code,naem,count
from tblBook
where date between '1390/01/01' and '1390/05/10'
موفق باشید.
دوست عزیز ممنونم.ولی مشکل من این نبود.
بطور مثال من یک کتابی با کد 111 دارم .در 10 روز مختلف به تعداد مختلف فروخته شده است.
مثلا 1شنبه 4 تا و 2شنبه 1 و...
حالا می خواهم وقتی کاربر از یک تاریخی تا تاریخ دیگر گزارش گرفت در دیتاگرید نمایش دهد نام کتاب و کد کتاب و تعداد=5 و ...(در یک ردیف نمایش دهد).؟

morteza271
دوشنبه 10 مرداد 1390, 17:32 عصر
اولا که چون شما توی این جدولتون کد کتاب رو کلید اصلی قرار دارین این امکان نداره که بتونین در این جدول چند روز مختلف برای یک کد کتاب ثبت کنید ولی در کل برای این کار کوئری زیر رو استفاده کن :
select code,name,count
from tblBook
where date between '1390/01/01' and '1390/05/10'
group by code,name

pedramfj
دوشنبه 10 مرداد 1390, 18:12 عصر
در صورت استفاده از SQL Server 2005 به بالا میتونید بصورت زیر عمل کنید
;With Res as(
Select
BookCode,
SUM(SellCount) as TotalSelling
From
TableName
Where
SellDate Between @Date1 AND @Date2
Group By
BookCode)
Select
T.*,
R.TotlaSelling
From
TableName T Inner Join Res R
ON
T.BookCode = R.BookCode
سلام
من از شما خیلی ممنونم ...
من به شکل زیر از کد شما استفاده می کنم .از پرانتزها و Res خطا میگیره .تشکر فراوان.
درضمن در بالا گفتم که کد کتاب کلید اصلی است .اشتباه شد ,کلید اصلی نیست.

SqlCommand com = new SqlCommand(With Res as("Select BookCode,SUM(SellCount) as TotalSelling From TableName Where SellDate Between @Date1 AND @Date2 Group By BookCode)Select T.*, R.TotlaSelling From TableName T Inner Join Res R ON T.BookCode = R.BookCode", con));

Reza_Yarahmadi
سه شنبه 11 مرداد 1390, 16:45 عصر
من به شکل زیر از کد شما استفاده می کنم .از پرانتزها و Res خطا میگیره .تشکر فراوان.
درضمن در بالا گفتم که کد کتاب کلید اصلی است .اشتباه شد ,کلید اصلی نیست.
دستوری که من نوشتم ، دستور SQL بود و همه کد باید بصورت رشته قرار داده بشه
SqlCommand com = new SqlCommand(@"With Res as(
Select BookCode,SUM(SellCount) as TotalSelling
From TableName
Where SellDate Between @Date1 AND @Date2 Group By BookCode)
Select
T.*, R.TotlaSelling
From TableName T Inner Join Res R
ON T.BookCode = R.BookCode", con);

pedramfj
جمعه 21 مرداد 1390, 14:18 عصر
con.Open();
SqlDataReader dr;

SqlCommand com = new SqlCommand(@"With Res as(Select id_factor,code_book,name_book,SUM(tedad) as TotalSelling From factor Where tarikh Between @tarikh AND @tarikh2 Group By code_book)Select T.*, R.TotlaSelling From factor T Inner Join Res R ON T.code_book= R.code_book", con);
com.Parameters.AddWithValue("@tarikh", textBox1.Text);
com.Parameters.AddWithValue("@tarikh2", textBox2.Text);
dr = com.ExecuteReader();

//
while (dr.Read())
{

dataGridView1.Rows.Add(new object[] { dr.GetInt64(0), dr.GetInt64(1), dr.GetString(2).Trim(), dr.GetInt64(3)/*, dr.GetInt64(4), dr.GetInt64(5), dr.GetString(6).Trim()*/ });



};
con.Close();

Reza_Yarahmadi
شنبه 22 مرداد 1390, 17:47 عصر
کد TSQL خودتون رو بصورت زیر تغییر بدید
With Res as(
Select
code_book,
SUM(tedad) as TotalSelling
From factor
Where
tarikh Between @tarikh AND @tarikh2
Group By
code_book)
Select
T.*,
R.TotlaSelling
From
factor T Inner Join Res R
ON
T.code_book = R.code_book