نمایش نتایج 1 تا 11 از 11

نام تاپیک: استفاده از دستور case در join

  1. #1

    استفاده از دستور case در join

    با سلام
    من میخوام بر اساس اعدادی که در یک فیلد قرار می گیرند یک فیلد دیگر را با جداول متفاوت join کنم(مثلا اگر فیلد 1 بود با جدول x وصل(join)بشه و اگر 2 بود با y و...
    آیا با دستور case میشه این کار را انجام داد و دستوری غیر از case برای این کار وجود دارد
    با تشکر

  2. #2

    نقل قول: استفاده از دستور case در join

    سلام،
    بنظرم برای حل مسالتون نیاز به چنین کارهایی ندارین.
    اگر مسالتون را با کمک داده های نمونه و نتیجه مورد نظر توضیح بدین تا با سناریوتون آشنا بشیم آون وقت میشه به حل مساله فکر کرد.
    وبلاگ من (Advanced SQL Querying)

  3. #3

    نقل قول: استفاده از دستور case در join

    من یک برنامه حسابداری کوچیک درست کردم برای یک برنامه پیمانکاری ساختمان حال یه حسابداری دوبل براش نوشتم همون دفتر روزنامه حال بر اساس گروهها(کارفرما.صندوق.مصالح فروش و...) که انتخاب می کند به جدول ان گروه مثلا تمام کارفرماها میرم وکارفرما را کاربر انتخاب می کتد حال دوفیلد اطلاعات داریم یکی نشان دهنده گروه ویکی دیگر زیر گروه که کدهای آن ذخیره میشود اما کد که برای کاربر جالب نیست مثلا ما باید به کاربر گروه (کارفرما) زیر گروه (علی کریمی)و برای بقیه هم همین طور

  4. #4

    نقل قول: استفاده از دستور case در join

    من متوجه نیازتون نشدم. اگر بتونید چند نمونه از داده هاتون همراه با نتیجه ی مورد نظر و توضیح در مورد اینکه چطور توسط داده های خام می خواهید نتیجه مطلوب بدست بیاد را پست کنید بهتر میشه راهنمایی کرد و جواب دقیق داد. چرا که باید روی یک نمونه مشخص و خاص مساله تحلیل بشه با مجرد توضیحات کار پیش نمیره.
    داده ها و نتیجه بایستی در جدول به صورت سطر و ستون به نمایش در بیان.
    وبلاگ من (Advanced SQL Querying)

  5. #5

    نقل قول: استفاده از دستور case در join

    من یک نمونه با فیلد های کمتر که مثل برنامه خودم هست درست کردم
    من چند تا گروه دارم(جدول groups) برای هر گروه یک جدول داریم برای گروه صندوق جدول t1 برای گروه حساب جدول t2 و....
    حال جدول t3 یک فیلد id که identity و یک فیلد groups که از جدول groups پر میشود و فیلد zir_group که با توجه به گروهی که انتخاب شده id ان گروه را ذخیره میکند
    حال ما میخواهیم یک query بنوبسیم که با توجه به این جداول ،جدول جواب را درست کند
    با تشکر
    عکس های ضمیمه عکس های ضمیمه

  6. #6

    نقل قول: استفاده از دستور case در join

    اینو امتحان کنید:
    جدول Table3 برابر با جدول t3 شماست که ستون zip_groups داره
    ;WITH C AS
    (SELECT id, name, grp = 1
    FROM T1
    UNION
    SELECT id, name, grp = 2
    FROM T2
    UNION
    SELECT id, name, grp = 3
    FROM T3
    )
    SELECT T3.id, G.name, C.name
    FROM Table3 AS T3
    JOIN Groups AS G
    ON T3.groups = G.id
    JOIN C
    ON T3.groups = C.grp
    AND T3.zip_group = C.id;
    وبلاگ من (Advanced SQL Querying)

  7. #7

    نقل قول: استفاده از دستور case در join

    با تشکر
    چون یک حسابداری دوبل درست کردم دو تا گروه وزیر گروه داریم یکی طرف بدهکار ویکی دیگه طرف بستنکار و یک مبلغ میخورد یک query باید به شکل زیر درست کرد

    ;WITH C AS (SELECT id, names, grp = 1 FROM T1 UNION SELECT id, names, grp = 2 FROM T2 UNION SELECT id, names, grp = 3 FROM T3 ) SELECT Ta.id, G.names AS bedGroup, C.names AS besZirGroup,G2.names AS besGroup,C1.names AS besZirGroup ,Ta.cost FROM Table3 AS Ta JOIN Groups AS G ON Ta.groups = G.id JOIN Groups AS G2 ON Ta.groups1=G2.id JOIN C ON Ta.groups = C.grp AND Ta.zir_group = C.id JOIN C AS C1 ON Ta.groups1=C1.grp AND ta.zir_group1=c1.id;

    من کدش را با کمک دوست عزیز msalim نوشتم
    من حدود 10 تا گروه دارم میخواستم ببینم روش ساده تری هست یا باید همین کد را بنویسم در ضمن وقتی تعداد رکورد ها بالا رفت آیا روی سرعت خیلی تاثیر دارد
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله karimi.ali2005 : یک شنبه 21 فروردین 1390 در 16:41 عصر

  8. #8

    نقل قول: استفاده از دستور case در join

    بنظرم اگر تمام گروه ها رو داخل یک جدول در نظر بگیرین بهتر باشه. ss8k چیزی به نام sparse داره که کمک می کنه null ها فضایی اشغال نکنن.
    وبلاگ من (Advanced SQL Querying)

  9. #9

    نقل قول: استفاده از دستور case در join

    میشه بگید ss8k چیه من اطلاعاتی دربارش ندارم در ضمن اگه یه فیلد رو nvarchar انتخاب کنیم و مقداری در آن ذخیره نکنیم آیا باز هم فضایی اشغال میکنه

  10. #10

    نقل قول: استفاده از دستور case در join

    متاسفم. باید می نشوتم ss2k8 یعنی SQL Server 2008.
    اگر مقدار دهی هم نشه بازم فضا اشغال می کنه. پیشنهاد می کنم در مورد sparse column تحقیق کنید.
    وبلاگ من (Advanced SQL Querying)

  11. #11

    نقل قول: استفاده از دستور case در join

    نقل قول نوشته شده توسط karimi.ali2005 مشاهده تاپیک
    با سلام
    من میخوام بر اساس اعدادی که در یک فیلد قرار می گیرند یک فیلد دیگر را با جداول متفاوت join کنم(مثلا اگر فیلد 1 بود با جدول x وصل(join)بشه و اگر 2 بود با y و...
    آیا با دستور case میشه این کار را انجام داد و دستوری غیر از case برای این کار وجود دارد
    با تشکر
    سلام. اگر از دستور select دارید استفاده میکنید و منظورتون این هست که در دستور select این کار رو انجام بدید فکر نمیکنم و شما باید بجای inner join از left join استفاده کنید. و هر دو جدول رو left join بدید. اینطوری هرجا فیلد 1 بود به جدول x جوین میشه و هرجا 2 بود به جدول y وصل میشه.

    اما اگر برای یک مقدار یا یک رکورد میخواید join بزنید میتونید از if استفاده کنید. به این صورت که مقدار رو اول بخونید و توی یک متغیر ذخیره کنید و بعد مقایسه کنید و اگر 1 بود به جدول x جوین میشه و هرجا 2 بود به جدول y وصل بشه.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •