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

نام تاپیک: دستوری برای تجمیع مقادیر یک ستون رشته ای با شرایط خاص(شبیه به Group By).

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    شیراز
    سن
    39
    پست
    74

    دستوری برای تجمیع مقادیر یک ستون رشته ای با شرایط خاص(شبیه به Group By).

    با سلام به همه دوستان.
    فرض کنید یک جدول داریم که دو ستون به شکل زیر دارد:

    - سال (عددی)
    - نام (رشته ای)

    مثلا :

    1388 علی
    1388 احمد
    1388 رضا
    1389 حسین
    1389 نادر
    --------------------------------------------------
    حالا یه query احتیاج داریم که نتیجه زیر رو بده:

    1388 علی احمد رضا
    1389 حسین نادر

    یه چیزی شبیه به دستور Group By که می توان مجموع، میانگین و ... یک ستون عددی رو به صورت گروه بندی بدست آورد.

    ممنون می شم راهنمایی کنید.

  2. #2

    نقل قول: دستوری برای تجمیع مقادیر یک ستون رشته ای با شرایط خاص(شبیه به Group By).

    فکر کنم دستوری برای اینکار در خود SQL وجود ندارد. شما یا باید از cursor استفاده کنید. یا خودتان یک تابع تعریف کنید که با ارسال سال خروجی مورد نظر شما را برگشت دهد و این تابع را در بدنه Select اصلی خود فراخوانی کنید.

  3. #3

    نقل قول: دستوری برای تجمیع مقادیر یک ستون رشته ای با شرایط خاص(شبیه به Group By).

    ميتونيد بصورت زير اين كار رو انجام بديد
    Select
    t.Year,
    (select Name + ' ' from TableName Where Year = t.Year For Xml Path('')) as Users
    From
    TableName t
    Group By
    t.Year

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    شیراز
    سن
    39
    پست
    74

    نقل قول: دستوری برای تجمیع مقادیر یک ستون رشته ای با شرایط خاص(شبیه به Group By).

    با تشکر از راهنماییتون.
    اگه ممکنه بگید قسمت For Xml Path('')) as Users چه کار می کنه؟

  5. #5

    نقل قول: دستوری برای تجمیع مقادیر یک ستون رشته ای با شرایط خاص(شبیه به Group By).

    قسمت For Xml Path('')) as Users چه کار می کنه؟
    بخش آخرش (as Users) که نام ستون رو تعیین میکنه.
    در مورد For Xml Path هم دوست خوبمون بهزادصادقی توضیح کاملی دادند منم اونو به صورت نقل قول میذارم.
    for xml یک جمله است که شما می توانید به هر select ای اضافه کنید. کاربرد معمولی آن این است که به SQL Server دستور می دهد که مجموعه نتایج این query را، به جای اینکه به صورت یک مجموعه معمولی به ما برگرداند، آنها را در قالب یک XML document در آورد و آن xml را به ما باز گرداند.

    استفاده از for xml معمولا فوق العاده پیچیده می باشد. من چند بار که سعی کرده ام از آن استفاده کنم، بعد از یکی دو ساعت بازی با آن، سرم گیج رفته.

    ولی یکی از گزینه های آن، هم syntax خیلی ساده ای دارد، و هم یک کاربرد فوق العاده جالب و به درد به خوری.

    هر وقت شما کلمات ('')for xml path را به آخر یک select که فقط یک ستون دارد اضافه می کنید، SQL Server می آید و رشته های کل آن سطر ها را به آخر هم وصل می کند و یک رشته که برابر است با جمع کل آنهاست باز می گرداند! و هیچ نشانی هم از xml دیده نمی شود.

    معلوم نیست Microsoft جرا این قابلیت را به وجود آورد. ولی جند سال پیش، یک نفر که داشت با for xml بازی می کرد، متوجه این مسئله شد و به این فکر افتاد که می شود از این فابلیت استفاده کرد که یک مسئله قدیمی سخت و پرهزینه (از لحاظ عملکرد) را در SQL Server حل کرد. و آن همان مسئله جمع کردن یک سری رشته از سطر های مختلف جدول می باشد. برای یک چنین کاری، معمولا خیلی ها از یک cursor استفاده می کنند. ولی cursor عملکرد کد را به صورت باور نکردنی وحشتناکی می آورد پائین. xml for path این توانایی را به ما می دهد که این نوع مسائل را بدون استفاده از cursor و با سرعت خیلی بالای حل کنیم.

    بعد از کشف این نکته، آن شخصی که این مسئله را کشف کرده بود این مطلب را در تالار های بحث SQL Server مثل همین تالار مطرح کرد، و بعد از مدت نسبتا کوتاهی این تکنیک بسیار در جهان SQL Server معروف و متداول گردید.

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

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