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

نام تاپیک: عدم نمایش داده ها در full join

  1. #1
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    عدم نمایش داده ها در full join

    وقت بخیر دوستان من دستور زیر رو نوشتم اما خروجی که بهم میده کامل نیست. نتیجه درسته ولی چرا باید ستون اول و سوم null بیاد !!!!! کجای دستورم اشتباه هست؟



    ; with cte as(SELECT [Ensani_MorakhasiPersonnelTbl].[PersonnelId],
    case
    when SUBSTRING([Date2],6,2)> SUBSTRING([Date1],6,2) AND CONVERT(int,SUBSTRING([Date1],6,2))= 6 then CountDay-CONVERT(int,SUBSTRING([Date1],9,2))
    when SUBSTRING([Date1],6,2)< SUBSTRING([Date2],6,2) AND CONVERT(int,SUBSTRING([Date2],6,2))=6 then CONVERT(int,SUBSTRING([Date2],9,2))
    else CountDay end as CountDay FROM [Ensani_MorakhasiPersonnelTbl] inner join PersonnelTbl on [Ensani_MorakhasiPersonnelTbl].PersonnelId=PersonnelTbl.PersonnelId
    where [Date1] between '1396/06/01' and '1396/06/31' or [Date2] between '1396/06/01' and '1396/06/31'
    )
    , cte1 as(SELECT [Ensani_MorakhasiPersonnelTbl].[PersonnelId]
    ,SUM([Ensani_MorakhasiPersonnelTbl].CountTime) as CountTime
    FROM [Ensani_MorakhasiPersonnelTbl]
    where [Date3] between '1396/06/01' and '1396/06/31'
    group by [Ensani_MorakhasiPersonnelTbl].[PersonnelId]


    )
    select PersonnelTbl.PersonnelId,sum(cte.CountDay) as CountDay,PersonnelTbl.Name+' '+PersonnelTbl.Family as PerName,cte1.CountTime
    from cte inner join PersonnelTbl on PersonnelTbl.PersonnelId=cte.PersonnelId full join cte1 on cte1.PersonnelId =PersonnelTbl.PersonnelId
    group by PersonnelTbl.PersonnelId,PersonnelTbl.Name,Personn elTbl.Family,CountTime





    اینم خروجی


    weweqweqw.png

  2. #2
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: عدم نمایش داده ها در full join

    برا توضیح بیشتر. اسکریپت جداولمو میزارم برا تست





    CREATE TABLE [dbo].[test](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [PerId] [nvarchar](50) NULL,
    [Name] [nvarchar](50) NOT NULL,
    CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
    (
    [id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[test1](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [PerId] [nvarchar](50) NULL,
    [Time] [nvarchar](50) NULL,
    CONSTRAINT [PK_test1] PRIMARY KEY CLUSTERED
    (
    [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[test2](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [PerId] [nvarchar](50) NULL,
    [Date] [nvarchar](50) NULL,
    CONSTRAINT [PK_test2] PRIMARY KEY CLUSTERED
    (
    [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]




    من یه سری داده آزمایشی تو جداول ریختم . حالا کوئری زیر رو میزنم و خروجی که میبینم برام تعجب آوره. (حتما اشتباه میکنم یا روشم درست نیست)

    این کوئری رو که میزنم چیزی نمایش نمیده



    SELECT test.PerId, test.Name, test2.Date, test1.Time
    FROM test INNER JOIN
    test1 ON test.PerId = test1.PerId INNER JOIN
    test2 ON test.PerId = test2.PerId



    این کوئری رو هم که میزنم از جدول test2 فقط مقدار تایم رو میاره و نمیتونم اسم شخص رو هم بیارم (از جدول test1 هم اسم رو نشون میده هم تاریخ رو)بجاش null میزنه



    select test.Name,test.PerId,test1.Time,test2.Date
    from test inner join test1 on test.PerId=test1.PerId
    full join test2 on test.PerId=test2.PerId



    ممنون میشم راجب اصلاح این کوئری راهنماییم کنید

  3. #3
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: عدم نمایش داده ها در full join

    حل شد اونم چه حل شدنی

    عجیب ترین کدی که نوشتم. به احتمال زیاد پرفورمنسشم داغووون




    ; with cte as(SELECT [Ensani_MorakhasiPersonnelTbl].[PersonnelId],
    case
    when SUBSTRING([Date2],6,2)> SUBSTRING([Date1],6,2) AND CONVERT(int,SUBSTRING([Date1],6,2))= 6 then CountDay-CONVERT(int,SUBSTRING([Date1],9,2))
    when SUBSTRING([Date1],6,2)< SUBSTRING([Date2],6,2) AND CONVERT(int,SUBSTRING([Date2],6,2))=6 then CONVERT(int,SUBSTRING([Date2],9,2))
    else CountDay end as CountDay FROM [Ensani_MorakhasiPersonnelTbl] inner join PersonnelTbl on [Ensani_MorakhasiPersonnelTbl].PersonnelId=PersonnelTbl.PersonnelId
    where [Date1] between '1396/06/01' and '1396/06/31' or [Date2] between '1396/06/01' and '1396/06/31'
    )
    , cte1 as(SELECT [Ensani_MorakhasiPersonnelTbl].[PersonnelId]
    ,SUM([Ensani_MorakhasiPersonnelTbl].CountTime) as CountTime
    FROM [Ensani_MorakhasiPersonnelTbl]
    where [Date3] between '1396/06/01' and '1396/06/31'
    group by [Ensani_MorakhasiPersonnelTbl].[PersonnelId]
    ),
    cte2 as(
    select PersonnelTbl.PersonnelId,sum(cte.CountDay) as CountDay,PersonnelTbl.Name+' '+PersonnelTbl.Family as PerName,0.00 as CountTime
    from cte join PersonnelTbl on PersonnelTbl.PersonnelId=cte.PersonnelId
    group by PersonnelTbl.PersonnelId,PersonnelTbl.Name,Personn elTbl.Family
    union
    select PersonnelTbl.PersonnelId,0 as CountDay,PersonnelTbl.Name+' '+PersonnelTbl.Family as PerName,CONVERT(decimal(3,2),sum(cte1.CountTime)) as CountTime
    from cte1 join PersonnelTbl on PersonnelTbl.PersonnelId=cte1.PersonnelId
    group by PersonnelTbl.PersonnelId,PersonnelTbl.Name,Personn elTbl.Family
    )
    select cte2.PersonnelId,cte2.PerName,sum(CountDay),sum (CountTime )
    from cte2
    group by cte2.PersonnelId,cte2.PerName


  4. #4

    نقل قول: عدم نمایش داده ها در full join

    اون جدولهای تستی که گذاشتید، برای چه هدفی join کردید؟ چون هیچ دلیل منطقی نمیبینم.
    در مورد اسکریپتی که جواب گرفتید، بایست اسکریپت جداول باشه تا بشه تست کرد و ایرادهاش رو گرفت.

  5. #5
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: عدم نمایش داده ها در full join

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    اون جدولهای تستی که گذاشتید، برای چه هدفی join کردید؟ چون هیچ دلیل منطقی نمیبینم.
    در مورد اسکریپتی که جواب گرفتید، بایست اسکریپت جداول باشه تا بشه تست کرد و ایرادهاش رو گرفت.
    بله درست میفرمایید. اما خب من توی پست دوم اسکریپت جداول رو گذاشتم (جدول نمونه هست. ). شما اگه بتونید بهترین روش رو برای جوین اون جداول بهم بدی ممنون میشم. خروجی از جوین اونا هم بشه (test.PerId,test.Name,Test1.Time,Test2.Date) همه افرادی که تایم دارن و تاریخ دارند یا یکی از اونا رو دارن...

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



    پ ن : قبلا هم یه راهنمایی ازتون خواستم راجب کارکرد یک نفر تو یک ماه که برای میلادی کدی برام دادید اما دردسرای تبدیلات تاریخ مانع استفاده از اون کوئری شد و خودم یه راه حل دیگه برای تاریخ شمسی درست کردم.

  6. #6

    نقل قول: عدم نمایش داده ها در full join

    سوال من اینه که چه ارتباطی بین ساعت و تاریخ هست و چرا در دو جدول؟ به نطر من جداول نمونه ای که گذاشتید کامل نیست و نمیشه همینطوری join کرد.
    بهتر اینه که مسئله رو توضیح بدید که چه اطلاعاتی در چه جداولی دارید و چه خروجی میخواهید.

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

  1. سوال: عدم نمایش داده ها در DbGrid در هنگام ثبت آنها
    نوشته شده توسط fire.angle در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: یک شنبه 26 تیر 1390, 01:06 صبح
  2. عدم نمایش داده ها در کریستال ریپورت
    نوشته شده توسط golemaryam_1983 در بخش C#‎‎
    پاسخ: 4
    آخرین پست: یک شنبه 22 خرداد 1390, 14:13 عصر
  3. سوال: عدم نمایش Event ها در VS
    نوشته شده توسط softkadeh در بخش C#‎‎
    پاسخ: 4
    آخرین پست: چهارشنبه 18 آذر 1388, 18:02 عصر
  4. عدم نمایش داده ها در کریستال ریپورت
    نوشته شده توسط arash_vb در بخش ابزارهای گزارش سازی
    پاسخ: 9
    آخرین پست: دوشنبه 19 آذر 1386, 10:05 صبح
  5. عدم نمایش رکورد ها در کریستال ریپورت در VB 2005
    نوشته شده توسط ehsan_ansaripoor در بخش ابزارهای گزارش سازی
    پاسخ: 3
    آخرین پست: سه شنبه 23 مرداد 1386, 21:05 عصر

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

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