PDA

View Full Version : سوال: select کردن چند فیلد از یک جدول



mas'oud
دوشنبه 26 اردیبهشت 1390, 21:01 عصر
سلام

فرض کنید جدولی داریم که دو ستون a و b دارد. چجوری یک دستور select بنویسم که همه فیلد های ستون a که دارای ستون b مشترک هستند در یک رشته ذخیره شود.
با این نکته که فرضا a از نوع تکست و b از نوع عدد است.

Editali
سه شنبه 27 اردیبهشت 1390, 01:14 صبح
اگه درست متوجه شده باشم راه حلش ساده اس:


SELECT Col1
FROM Table1
WHERE Col1 = (CONVERT(NVarChar,Col2))

که Col1 از نوع nvarchar و Col2 از نوع int هستند.

mas'oud
سه شنبه 27 اردیبهشت 1390, 10:32 صبح
ببینید، شاید سوالم رو خوب مطرح نکردم:
من در حقیقت دستور سلکت رو نوشتم ولی به جای اینکه همه سطرهای جستجو شده رو برگردونه، فقط اولین سطری رو که پیدا میکنه نشون میده
من میخوام همه سطرهایی که دارای ستون b مشترک هستند در یک لیبل نمایش داده بشه.
فکر کنم از حلقه foreach باید استفاده کنم ولی نمیدونم چجوری بنویسمش. خواهشا کمک کنید.

mas'oud
سه شنبه 27 اردیبهشت 1390, 14:54 عصر
خواهشن جواب بدید!
یه تست از برنامه رو آپ کردم - البته دیتابیس اصلی حجمش خیلی بود یه نمونه کوچیک ازش ساختم
ببینید کجا مشکل داره.
مثلا کلمه able چندتا معنی داره ولی فقط اولین رکورد رو نمایش میده!70035

Editali
سه شنبه 27 اردیبهشت 1390, 15:27 عصر
این کد رو با اونی که من اصلاح کردم جایگزین کن:

if (dr2.Read())
id = dr2["Word_ID"].ToString();
else
id = "";

و

if (dr1.Read())
lblFa.Text = dr1["Farsi_Word"].ToString();
else
lblFa.Text = "";


با این:

while (dr2.Read())
id += dr2["Word_ID"].ToString() + "\r\n";

و

while (dr1.Read())
lblFa.Text += dr1["Farsi_Word"].ToString()+"\r\n";


شما از یک دیتاریدر استفاده کردی، دیتا ریدرها نتیجه پرس و جو رو به صورت خط به خط بر میگردونن. پس شما باید تا آخرین رکرود اونارو اجرا کنید.
کدی که من تصحیح کردم به زبون ساده به این شرحه:

تا زمانی که دیتا ریدر مقداری رو بر میگردونه به مقدار رشته ای مقدار دریافتی رو اضافه کن و در آخر هر رکرود (درون رشته میشه خط) یه کاراکتر اینتر اضافه کن (برای رفت به خط بعد)

mehdi.mousavi
سه شنبه 27 اردیبهشت 1390, 16:10 عصر
سلام فرض کنید جدولی داریم که دو ستون a و b دارد. چجوری یک دستور select بنویسم که همه فیلد های ستون a که دارای ستون b مشترک هستند در یک رشته ذخیره شود. با این نکته که فرضا a از نوع تکست و b از نوع عدد است.

سلام.
لطفا به این آدرس (http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=createacommadelimitedlist) رجوع کنید (این کار با نوشتن یک دستور SELECT میسره).

موفق باشید.

masoudmok
سه شنبه 27 اردیبهشت 1390, 17:12 عصر
دوست عزیز با نوشتن یه Group by col2 اخر دستور select میتونی این کارو انجام بدی . البته بعد از اون باید اطلاعاتو ( col1 رو ) با یه چیزی شبیه data reader از دیتا بیس بخونی و با هم ترکیبشون کنی

Reza_Yarahmadi
سه شنبه 27 اردیبهشت 1390, 18:26 عصر
یکی از روشهایی که برای این کار وجود داره بصورت زیر است
Select
a,
b = (Select b + ',' From TableName Where a = T.a For XML PAth(''))
From
TableName T
Group By
a