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

نام تاپیک: گزارش نقل وانتقال سهام

  1. #1

    گزارش نقل وانتقال سهام

    سلام دوستان
    من می خواه یه گزارش بسازم که حسابی توش موندم ...میشه کمکم کنین.....


    من دو تا جدول دارم یکی جدول سهامدارانStocker دومی جدول نقل و انتقال Trans
    در جدول نقل و وانتقال سه فیلد دارم: 1-کدخریدار 0000 2-کدفروشنده ...3-مقدار سهم منتقل شده
    که این جدول از طریق کد خریدار و فروشنده با جدول سهامدار ارتباط دارد ....
    حال من میخواهم گزارشی بسازم که لیست خرید ها و فروش های هر سهامدار را به تفکیک افراد بدهد.یعنی برای هر سهامدار کلیه خرید ها و فروش هایش را پشت سر هم لیست کند.من میتونم این اطلاعات را تحت دو تا گزارش بدهم منتها تحت یک گزارش نتونستم
    ضمنا من برای ساخت گزارش از ابزار Crystal Report استفاده میکنم....
    مرسی :sunglass:

  2. #2
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    I am very interested in your project, cuz it's kinda sotck related. Please PM me your phone number if you are interested in a talk.

  3. #3
    اون که حتما ..منتها اول باید گزارشو بسازم
    اگه کمکم کنین خیلی ممنون میشم

  4. #4
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    تهران
    پست
    558
    سلام
    برای اینکه یه همچینی گزارشی رو بسازی٬‌میتونی افزونگی داده رو در بانک اطلاعاتی نادیده بگیری (این کار در بعضی از سیستمها اعمال میشه) و جدول رو جوری طراحی کنی تا بتونی به نیازهای کاربران با سرعت بیشتری پاسخ بدی.
    ببین افزونگی داده نداشتن در بانک برات مهم تره یا سرعت پاسخ دادن به مشتریها در حجمهای بالای داده هات.

    خوب اگه بی خیال افزونگی شده بگو تا برای این مورد کمکت کنم.
    البته راههای دیگه ای هم مثل انباره داده ها٬‌ olap و ...هم برای انجام کارات هستش که بعید می دونم بتونی پیاده سازی و استفاده کنی.

    این کد رو هم یه نگاهی بنداز و اجراش کن

    CREATE TABLE [dbo].[Table1] (
    [id] [numeric](18, 0) NOT NULL ,
    [name] [char] (10) COLLATE Arabic_CI_AS NULL
    ) ON [PRIMARY]
    GO

    CREATE TABLE [dbo].[Table2] (
    [id] [numeric](18, 0) NOT NULL,
    [id_b] [numeric](18, 0) NULL ,
    [id_s] [numeric](18, 0) NULL ,
    [sahm_b] [numeric](18, 0) NULL ,
    [sahm_s] [numeric](18, 0) NULL ,
    [id_to_from] [numeric](18, 0) NULL
    ) ON [PRIMARY]
    GO

    ALTER TABLE [dbo].[Table1] WITH NOCHECK ADD
    CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
    (
    [id]
    ) ON [PRIMARY]
    GO

    ALTER TABLE [dbo].[Table2] WITH NOCHECK ADD
    CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
    (
    [id]
    ) ON [PRIMARY]
    GO

    ALTER TABLE [dbo].[Table2] ADD
    CONSTRAINT [FK_Table2_Table1] FOREIGN KEY
    (
    [id_b]
    ) REFERENCES [dbo].[Table1] (
    [id]
    ),
    CONSTRAINT [FK_Table2_Table11] FOREIGN KEY
    (
    [id_s]
    ) REFERENCES [dbo].[Table1] (
    [id]
    ),
    CONSTRAINT [FK_Table2_Table12] FOREIGN KEY
    (
    [id_to_from]
    ) REFERENCES [dbo].[Table1] (
    [id]
    )
    GO
    INSERT INTO TABLE1 VALUES(1,'ALI')
    INSERT INTO TABLE1 VALUES(2,'REZA')
    INSERT INTO TABLE1 VALUES(3,'YASER')
    INSERT INTO TABLE1 VALUES(4,'HADI')
    GO
    INSERT INTO TABLE2 VALUES(1, NULL, 1, NULL, 100, 2)
    INSERT INTO TABLE2 VALUES(2, 2, NULL, 100, NULL, 1)
    INSERT INTO TABLE2 VALUES(3, NULL, 2, NULL, 50, 1)
    INSERT INTO TABLE2 VALUES(4, 1, NULL, 50, NULL, 2)
    INSERT INTO TABLE2 VALUES(5, NULL, 3, NULL, 70, 1)
    INSERT INTO TABLE2 VALUES(6, 1, NULL, 70, NULL, 3)
    GO
    SELECT
    LTRIM(RTRIM(
    CASE
    WHEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_B) IS NOT NULL THEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_B)
    ELSE ''
    END
    + CASE
    WHEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_S) IS NOT NULL THEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_S)
    ELSE ''
    END
    )) AS 'معامله کننده'
    , CASE
    WHEN SAHM_B IS NOT NULL THEN SAHM_B
    ELSE NULL
    END AS 'تعداد سهم خریداری شده'
    , CASE
    WHEN SAHM_S IS NOT NULL THEN SAHM_S
    ELSE NULL
    END AS 'تعداد سهم فروخته شده'
    , (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_TO_FROM) AS 'از/به چه کسی'
    FROM TABLE2 T2
    ORDER BY 'معامله کننده'



    امیدورام بدردت بخوره.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    تهران
    پست
    558
    سلام
    البته کد پرس و جوی بالا رو میشه اینجوری هم نوشت :

    SELECT 
    LTRIM(RTRIM(
    CASE
    WHEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_B) IS NOT NULL THEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_B)
    ELSE ''
    END
    + CASE
    WHEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_S) IS NOT NULL THEN (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_S)
    ELSE ''
    END
    )) AS 'معامله کننده'
    , CASE
    WHEN (CASE
    WHEN SAHM_B IS NOT NULL THEN SAHM_B
    ELSE NULL
    END) IS NOT NULL THEN 'خریداری شده'
    ELSE 'فروخته شده'
    END AS 'وضعیت انتقال سهام'
    , CASE
    WHEN (CASE
    WHEN SAHM_B IS NOT NULL THEN SAHM_B
    ELSE NULL
    END) IS NOT NULL THEN (CASE
    WHEN SAHM_B IS NOT NULL THEN SAHM_B
    ELSE NULL
    END)
    ELSE (CASE
    WHEN SAHM_S IS NOT NULL THEN SAHM_S
    ELSE NULL
    END)
    END AS 'تعداد سهم معامله شده'
    , (SELECT NAME FROM TABLE1 T1 WHERE T1.ID = T2.ID_TO_FROM) AS 'از/به چه کسی'
    FROM TABLE2 T2
    ORDER BY 'معامله کننده', 'وضعیت انتقال سهام'


    امیدوارم بدردت بخوره

  6. #6
    مجید جان سلام
    بابت وقتی که گذاشتی ممنون
    :kaf: اما من امکان تغییر صراحی بانکو ندارم ..بانک طراحی قبلا طراحی شده و من فقط می تونم اطلاعاتو واکشی کنم.

    بازم از لطفت ممنون :sunglass:

  7. #7
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    تهران
    پست
    558
    سلام
    پس بهتره وقتت رو برای انجام این کار با tsql تلف نکنی٬‌ اگه با اوراکل کار می کردی براحتی این کد رو برات با pl/sql می نوشتم.
    یه راه برات میمونه٬‌یه جدول temp بساز و یه تابع که اونرو پر کنه بعد اونرو بخون و تو گزارشت بکار ببر.
    و یا اینکه امکانات olap خود sql server رو نگاه کن.

  8. #8
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    136
    نقل قول نوشته شده توسط majid_afra222
    یه راه برات میمونه٬‌یه جدول temp بساز و یه تابع که اونرو پر کنه بعد اونرو بخون و تو گزارشت بکار ببر.
    نظر من هم همینه ... من در این موارد همین کار رو می کنم

  9. #9
    سلام
    راه خوبی بود
    من هم یه جدول موقت ساختم و گزارشم ساخته شد .

    ممنون دوستان
    :موفق:

  10. #10
    یا من سوال شما را درست نفهمیدم یا ...؟ :kaf:
    یک گزارش ازsql بگیر هرجا که فیلد خریدار یا فروشنده برابر کد مورد گزارش باشه
    خروجی را همه خرید ها و فروشهای شخص مورد نظر. برای همه تکرار گزارش فکر کنم مناسب باشه چون به نظر نمیرسه کاربر بخواهد از آن یک جا استفاده کند :موفق:

  11. #11
    کریم جان نیازی به کار اضافی نیست. من دو جدول مطابق چیزی که در اختیار دارین ساختم:
    CREATE TABLE Stocker(
    STID INT NOT NULL PRIMARY KEY,
    STName NVARCHAR(50))

    INSERT Stocker VALUES(1,'Nima')
    INSERT Stocker VALUES(2,'Ali')
    INSERT Stocker VALUES(3,'Reza')
    INSERT Stocker VALUES(4,'Farhad')

    CREATE TABLE Trans(
    S_ID INT,
    B_ID INT,
    Amount INT)

    INSERT Trans VALUES(1,3,100)
    INSERT Trans VALUES(4,3,50)
    INSERT Trans VALUES(2,4,1000)
    INSERT Trans VALUES(4,1,200)
    INSERT Trans VALUES(1,2,600)
    INSERT Trans VALUES(3,1,350)

    حالا فقط کافیه یکبار بر اساس فروشنده ها و یکبار بر اساس خریدارها Join انجام بدین و نتیجه رو بوسیله UNION به هم پیوند بزنین:
    SELECT * FROM 
    (
    SELECT S1.STName, '1 (foroosh be:)' AS 'Tran Type', S2.STName AS 'Person', T.Amount
    FROM Stocker S1
    JOIN Trans T
    ON S1.STID=T.S_ID
    JOIN Stocker S2
    ON S2.STID=T.B_ID

    UNION ALL

    SELECT S1.STName, '2 (kharid az:)' AS 'Tran Type', S2.STName AS 'Person', T.Amount
    FROM Stocker S1
    JOIN Trans T
    ON S1.STID=T.B_ID
    JOIN Stocker S2
    ON S2.STID=T.S_ID

    ) tmp
    ORDER BY STName, [Tran Type]

    اگر هم خواستین اول خریدهای یکنفر رو نشون بدین، میتونین به این صورت Sort کنین:
    ORDER BY STName, [Tran Type] DESC

    موفق باشید..

  12. #12
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    تهران
    پست
    558
    سلام
    درسته٬‌ منم با این یکی موافقترم.
    ممنون

  13. #13
    سلام
    عالی بود امین خان
    خسته نباشی

    از بقیه هم خیلی ممنون
    :sunglass:

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

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