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

نام تاپیک: به دست آوردن موجودي كالا با دستورات TSQL

  1. #1

    به دست آوردن موجودي كالا با دستورات TSQL

    با سلام خدمت دوستان
    من يك جدول دارم كه مي خوام از توي اون موجودي رو بدست بيارم. فيلدهاشم به اينصورت كه (sh_fac,flag,OD_CD,quantity) كه فارسيش (تعداد، كد كالا، نوع فاكتور، شماره فاكتور)ميشه.
    نكته منظور از نوع فاكتور رسيد يا حواله بودن است. حالا مي خوام يه كوئري بنويسم كه بياد موجودي هر كالا رو واسم بياره. بدين صورت كه بياد جمع به جايي كه همه فيلد Quantity رو با هم جمع كنه اگه مقدار flag برابر مثلا 5 باشه بياد به فيلد mojodi اضافه بشه اگه مقدارش 6 باشه از فيلد موجودي كم بشه. كه از آخر با Group By كردن بر اساس كد كالا مقدار موجودي توي فيلد موجودي قرار بگيره. كسي هست راهنمايي كنه؟


  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    نقل قول نوشته شده توسط sempaisaleh مشاهده تاپیک
    با سلام خدمت دوستان
    من يك جدول دارم كه مي خوام از توي اون موجودي رو بدست بيارم. فيلدهاشم به اينصورت كه (sh_fac,flag,OD_CD,quantity) كه فارسيش (تعداد، كد كالا، نوع فاكتور، شماره فاكتور)ميشه.
    نكته منظور از نوع فاكتور رسيد يا حواله بودن است. حالا مي خوام يه كوئري بنويسم كه بياد موجودي هر كالا رو واسم بياره. بدين صورت كه بياد جمع به جايي كه همه فيلد Quantity رو با هم جمع كنه اگه مقدار flag برابر مثلا 5 باشه بياد به فيلد mojodi اضافه بشه اگه مقدارش 6 باشه از فيلد موجودي كم بشه. كه از آخر با Group By كردن بر اساس كد كالا مقدار موجودي توي فيلد موجودي قرار بگيره. كسي هست راهنمايي كنه؟

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

    یه چیز دیگه هم می‌خوام بگم که امیدوارم ناراحت نشی اما خیلی مهمه
    با این شکل نام‌گذاری روی جدول و ستون‌ها، ( و احتمالاً متغیر‌ها و متدها توی برنامه‌ات) فقط می‌تونی تنهایی کار کنی.
    سعی کن عادی کنی که نام‌گذاری رو کامل و بدون استفاده از پینگلیش! انجام بدی.
    مثلاً InvoiceNumber چه اشکالی داره که بجاش از sh_fac استفاده می‌کنی؟ یا مثلاً OD_CD یعنی چی؟
    این‌ها مثل خط و امضای برنامه‌نویس می‌مونه. سعی کن یه جوری بنویسی که همه به راحتی بتونن بخونن.

    صبا صبوحی

  3. #3

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

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

    یه چیز دیگه هم می‌خوام بگم که امیدوارم ناراحت نشی اما خیلی مهمه
    با این شکل نام‌گذاری روی جدول و ستون‌ها، ( و احتمالاً متغیر‌ها و متدها توی برنامه‌ات) فقط می‌تونی تنهایی کار کنی.
    سعی کن عادی کنی که نام‌گذاری رو کامل و بدون استفاده از پینگلیش! انجام بدی.
    مثلاً InvoiceNumber چه اشکالی داره که بجاش از sh_fac استفاده می‌کنی؟ یا مثلاً OD_CD یعنی چی؟
    این‌ها مثل خط و امضای برنامه‌نویس می‌مونه. سعی کن یه جوری بنویسی که همه به راحتی بتونن بخونن.

    صبا صبوحی
    دوست عزيز مرسي از جواب سريعت
    در خصوص ديتابيس و راه حلي كه پيشنهاد دادين بايد عرض كنم كه ديتابيس مربوط به نرم افزار جامع مالي شركت هست و بنده ننوشتم. حالام بايد بدوم دنبال راه حلي كه كارم راه بندازه. خودمم زياد راضي از اين نوع ديتابيس ها نيستم هنوز كه هنوز دارم دردسر ميكشم بابت برنامه نويسي كه براي اين برنامه شده.
    حالا راه حلي براي اين بدست آوردن موجودي با اين شرايط مي خوام

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    نقل قول نوشته شده توسط sempaisaleh مشاهده تاپیک
    دوست عزيز مرسي از جواب سريعت
    در خصوص ديتابيس و راه حلي كه پيشنهاد دادين بايد عرض كنم كه ديتابيس مربوط به نرم افزار جامع مالي شركت هست و بنده ننوشتم. حالام بايد بدوم دنبال راه حلي كه كارم راه بندازه. خودمم زياد راضي از اين نوع ديتابيس ها نيستم هنوز كه هنوز دارم دردسر ميكشم بابت برنامه نويسي كه براي اين برنامه شده.
    حالا راه حلي براي اين بدست آوردن موجودي با اين شرايط مي خوام
    سلام
    خوب می‌تونی جدول رو به صورت مجازی بسازی، می‌دونی که هر Select یک جدول هست، پس می‌تونی یه select بنویسی که با استفاده از CASE یک ستون رو تبدیل به
    دو ستون کنی و از این جدول تو Select اصلی که Group By داره استفاده کنی. البته کلاً چون با View مشکل دارم، تبدیل این Select به View رو توصیه نمی‌کنم.
    البته راه حل‌های دیگه هم وجود داره، اما گمان کنم این به‌ترین باشه.

    صبا صبوحی

  5. #5

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    با تشكر از جوابتون
    من كمي با case مشكل دارم وگرنه ميتونم بيام موقعي كه select مينويسم بگم يك فيلد جمع بذار اگه مقدار فيلد flag مثلا 5 بود بياد مقدار Quantity‌ رو به مقدار فيلد جمع اضافه كن اگه هم flag برابر 6 بود بياد مقدار Quantity رو از فيلد جمع كم كن.
    ولي مشكلم همينجاست نميدونم چطور از case يا if ميتونم تو اين دستوراتم استفاده كنم.

    SELECT FLAG, OD_CD, SUM(QUANTITY) AS jam
    FROM S_DTL_FCT
    GROUP BY S_HED_FCT.FLAG, S_DTL_FCT.OD_CD
    HAVING (S_HED_FCT.FLAG = 5 OR
    S_HED_FCT.FLAG = 6)
    ORDER BY S_DTL_FCT.OD_CD


  6. #6
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    نقل قول نوشته شده توسط sempaisaleh مشاهده تاپیک
    با تشكر از جوابتون
    من كمي با case مشكل دارم وگرنه ميتونم بيام موقعي كه select مينويسم بگم يك فيلد جمع بذار اگه مقدار فيلد flag مثلا 5 بود بياد مقدار Quantity‌ رو به مقدار فيلد جمع اضافه كن اگه هم flag برابر 6 بود بياد مقدار Quantity رو از فيلد جمع كم كن.
    ولي مشكلم همينجاست نميدونم چطور از case يا if ميتونم تو اين دستوراتم استفاده كنم.

    SELECT FLAG, OD_CD, SUM(QUANTITY) AS jam
    FROM S_DTL_FCT
    GROUP BY S_HED_FCT.FLAG, S_DTL_FCT.OD_CD
    HAVING (S_HED_FCT.FLAG = 5 OR
    S_HED_FCT.FLAG = 6)
    ORDER BY S_DTL_FCT.OD_CD

    سلام
    یادته گفتم که خروجی هر Select یک Table هست؟

    SELECT OD_DC, Summary = SUM( Incomming ) - SUM( Outgoing )
    FROM (
    SELECT OD_DC, Incomming = CASE WHEN Flag = 5 THEN Quantity ELSE 0 END
    , Outgoing = CASE WHEN Flag = 6 THEN Quantity ELSE 0 END
    FROM S_DTL_FCT ) T
    GROUP BY OD_DC

    به همین راحتی


    صباصبوحی

  7. #7
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    سلام
    نمی دونم این پروژه انبارداری رو که گذاشتم دیدن یا نه ؟
    تو قسمت کارتکس کالا گیر کردم :

    نمیتونم چند تا سلکت (از چند جدول) رو باهم ادغام کنم ! (البته sp پارامتر داره که اسم کالاهستش)
    که مربوط به جدول مشخصات دیگه هست ! چطور اطلاعات رو از دو تا جدول خرید و فروش بهش اضافه کنم ؟
    -----------------------------

    USE [AnbarDB]GO
    /****** Object: StoredProcedure [dbo].[Kardex] Script Date: 03/05/2015 17:54:46 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Procedure [dbo].[Kardex]
    @Kala nvarchar(50)


    AS
    BEGIN
    select
    dbo.TAnbar.Anbar as anbar,
    dbo.TAnbar.Kalatype as noekala,
    dbo.TKala.Cod as cod,
    dbo.TKala.Kala as kala,
    dbo.TKala.Vahed as vahed,
    dbo.TKala.Toz as tozi,
    dbo.TKala.Mojodi as mojodi,
    dbo.TKala.Pic as pict
    From dbo.TAnbar inner join dbo.TKala
    on dbo.TAnbar.Anbar = dbo.TKala.Anbar
    where dbo.TKala.Kala = @Kala
    END

  8. #8
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    سلام
    دوست من، این فرمی که گذاشتی شباهتی به فرم «کارت کالا» ( یا همون کاردکس ) نداره.
    گمان کنم کمی اشتباه کرده باشی.
    فرم کارت کالا یه جدول هست که ستون‌های تاریخ، سند، تعداد ورود و تعداد خروج داره.

    صبا صبوحی

  9. #9
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    سلام
    مشخصات کالا - خرید/فروش (همون ورود و خروج دیگه :)) -صد البته + تاریخ
    ---------------
    منتها همه اینارور توی یه جدول ندارم !
    کالا رو که از طریق وریبل و پارامتر (نام کالا) هست انتخاب می کنم ... ولی تو بقیش گیر کردم !

  10. #10
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    سلام
    مشخصات کالا - خرید/فروش (همون ورود و خروج دیگه :)) -صد البته + تاریخ
    ---------------
    منتها همه اینارور توی یه جدول ندارم !
    کالا رو که از طریق وریبل و پارامتر (نام کالا) هست انتخاب می کنم ... ولی تو بقیش گیر کردم !
    سلام
    اگه کارفرما فرم رو اینطوری خواسته که حرفی نیست. چون در نهایت پول پروژه رو کارفرما می‌ده نه من :)
    اما این رو مطمئن باش که این فرم هیچ ربطی به «کارت کالا» نداره.
    «کارت کالا» یه فرم استاندارد انبار هست که همه جا هم به یک شکل ازش استفاده می‌شه.

    صبا صبوحی

  11. #11
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    سلام
    اگه کارفرما فرم رو اینطوری خواسته که حرفی نیست. چون در نهایت پول پروژه رو کارفرما می‌ده نه من :)
    اما این رو مطمئن باش که این فرم هیچ ربطی به «کارت کالا» نداره.
    «کارت کالا» یه فرم استاندارد انبار هست که همه جا هم به یک شکل ازش استفاده می‌شه.

    صبا صبوحی
    ----------------
    کارفرما و برنامه نویس که خودمم :)
    چند جایی نگاه کردم ... ولی اطلاعات بدرد بخور تو بانک الان اینا رو دارم فقط !؟

    http://www.articlesoft.ir/articlehel...page=p0057.htm

    http://cactus.ir/tabid/63/Default.aspx

    الان چطور چند تا سلکت رو با هم ادغام کنم ؟ فعلا کوئری همین رو بزنم ! (شاهکار کردم)

  12. #12
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    اینو زدم ولی به group by گیر میده :

    USE [AnbarDB]GO
    /****** Object: StoredProcedure [dbo].[Kardex] Script Date: 03/09/2015 10:52:57 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Procedure [dbo].[Kardex]
    @Kala nvarchar(50)


    AS
    BEGIN
    select
    dbo.TAnbar.Anbar as anbar,
    dbo.TAnbar.Kalatype as noekala,
    dbo.TKala.Cod as cod,
    dbo.TKala.Kala as kala,
    dbo.TKala.Vahed as vahed,
    dbo.TKala.Toz as tozi,
    dbo.TKala.Mojodi as mojodi,
    dbo.TKala.Pic as pict,
    COUNT(dbo.TBuy.Kala) as tedadkala,
    SUM(dbo.TBuy.Andaze) as andaz,
    SUM(dbo.TBuy.Kol) as kalakol,
    COUNT(dbo.TSel.Kala) as tedadkala2,
    SUM(dbo.TSel.Andaze) as andaz2,
    SUM(dbo.TSel.Kol) as kalakol2
    From dbo.TAnbar inner join dbo.TKala on dbo.TAnbar.Anbar = dbo.TKala.Anbar
    inner join dbo.TBuy on dbo.TKala.Kala = dbo.TBuy.Kala
    inner join dbo.TSel on dbo.TKala.Kala = dbo.TSel.Kala
    where dbo.TKala.Kala = @Kala
    group by dbo.TKala.Kala
    END


    خطا :

    Msg 8120, Level 16, State 1, Procedure Kardex, Line 7
    Column 'dbo.TAnbar.Anbar' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

  13. #13
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    اینو زدم ولی به group by گیر میده :
    سلام
    دوست عزیز، طبیعی هست که گیر بده. شما وقتی Group می‌کنی. تو فهرست Select خودت فقط مجاز به استفاده از ستون‌هایی هستی
    که جلوی Group آمده. غیر از اون فقط می‌تونی از توابع جمع کننده مثل Sum, Min, Max, Avg, Count و امثال این‌ها استفاده کنی.

    تو این پروژه کارفرما و مجری خودتی، اما همیشه اینطور نخواهد بود. شما باید تو این بازار هم بتونی با دیگران کار گروهی انجام بدی و
    هم برای کارفرماها کار کنی. کارفرماها هم معمولاً مشاور IT دارن.
    سعی کن از همین اول کار عادی کنی که نام جدول‌ها، ستون‌ها، متغیرها و متدهای برنامه‌هات رو درست و به زبان انگلیسی و بدون PINGLISH
    انتخاب کنی. مطمئن باش همین چیزهای به ظاهر بی‌اهمیت «متر»هایی برای سنجش توانایی شما توسط کارفرماها و همکارانتان خواهند بود.

    صبا صبوحی

  14. #14
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    قسمت انبار رو وقتی حذف میکنم باز همین خطا رو میده *** الان دیگه فقط با کالا سر و کار داره دیگه (تو سه تا جدول هم هستش)
    ------------
    منظورم از هم برنامه نویس و هم کارفرما ، (پروژه) تمرین هستش !
    ------------
    قطعا تو پروژه بعدی (تازه دارم نمودار er اش رو میکشم) فینگلیش نمیزنم :)

  15. #15
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    قسمت انبار رو وقتی حذف میکنم باز همین خطا رو میده *** الان دیگه فقط با کالا سر و کار داره دیگه (تو سه تا جدول هم هستش)
    ------------
    منظورم از هم برنامه نویس و هم کارفرما ، (پروژه) تمرین هستش !
    ------------
    قطعا تو پروژه بعدی (تازه دارم نمودار er اش رو میکشم) فینگلیش نمیزنم :)
    سلام
    شرطی که گفتم رو فراموش نکن. هر چیزی که جلوی Select میاد باید یکی از دو شرط زیر رو داشته باشه.
    الف) داخلی یکی از توابع جمع کننده باشه ( Min, Max, Sum, Count, Avg, etc )
    ب) جلوی Group By هم قید شده باشه

    صبا صبوحی

  16. #16
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: به دست آوردن موجودي كالا با دستورات TSQL

    سلام به همه ...
    با این پروسیجر میشه هر چند تا جدول رو با هم join کرد :

    USE [AnbarDB] 
    GO
    /****** Object: StoredProcedure [dbo].[Kardex] Script Date: 03/10/2015 23:06:58 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Procedure [dbo].[Kardex]
    @Kala nvarchar(50)

    AS
    BEGIN
    With T1(Kala, tedadkala, andaz, kalakol)
    AS
    (SELECT Kala, Count(Kala), SUM(Andaze), SUM(Kol)
    from TBuy GROUP BY Kala),
    T2(Kala, tedadkala2, andaz2, kalakol2)
    AS
    (SELECT Kala, Count(Kala), SUM(Andaze), SUM(Kol)
    from TSel GROUP BY Kala)
    select
    dbo.TAnbar.Anbar as anbar,
    dbo.TAnbar.Kalatype as noekala,
    dbo.TKala.Cod as cod,
    dbo.TKala.Kala as kala,
    dbo.TKala.Vahed as vahed,
    dbo.TKala.Toz as tozi,
    dbo.TKala.Mojodi as mojodi,
    dbo.TKala.Pic as pict,
    tedadkala,
    andaz,
    kalakol,
    tedadkala2,
    andaz2,
    kalakol2
    From dbo.TAnbar
    inner join dbo.TKala on dbo.TAnbar.Anbar = dbo.TKala.Anbar
    inner join T1 on T1.Kala = TKala.Kala
    inner join T2 on TKala.Kala = T2.Kala
    where dbo.TKala.Kala = @kala
    END


    یا علی !

تاپیک های مشابه

  1. حرفه ای: بدست آوردن موجودي كالا با سه جدول تعداد اوليه و خريد و فروش
    نوشته شده توسط hossein_sh2008 در بخش C#‎‎
    پاسخ: 19
    آخرین پست: شنبه 14 اردیبهشت 1392, 09:43 صبح
  2. به دست آوردن دستورات Sql یک DataBase
    نوشته شده توسط Davood_amega در بخش SQL Server
    پاسخ: 2
    آخرین پست: جمعه 08 مرداد 1389, 00:27 صبح
  3. به دست آوردن دستورات Sql یک DataBase
    نوشته شده توسط Davood_amega در بخش C#‎‎
    پاسخ: 1
    آخرین پست: پنج شنبه 07 مرداد 1389, 23:33 عصر
  4. به دست آوردن IP ی ISP یی که به او connect شدیم
    نوشته شده توسط sajjad_rpg در بخش امنیت در شبکه
    پاسخ: 7
    آخرین پست: یک شنبه 09 بهمن 1384, 16:04 عصر
  5. به دست آوردن مسیر جاری
    نوشته شده توسط mostafa612003 در بخش PHP
    پاسخ: 6
    آخرین پست: شنبه 15 آذر 1382, 07:38 صبح

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

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