• 1397/11/08

درخواست کوئری SQL SERVER :

با سلام و خسته نباشید
من دو تا جدول دارم یکی اطلاعات پرسنل و دومی اطلاعات ورود و خروج پرسنل
می خواهم گزارشی داشته باشم که لیست پرسنل رو در هر روز نمایش داده و ریز تردد هر شخص رو در یک ردیف نمایش دهد
این کار رو با استفاده از linq انجام دادم اما سرعت گزارش پایین هست

من کوئری SQL رو می خوام
این هم نمونه کد خودم

using (var db = new DB_ClockMHDataContext(MH_Static.Constr))
            {
                mS_GridX1.DataSource = (from i in db.Tbl_Personels
                                        let txt = string.Join(" , ", i.Tbl_All_Vorudis
                                            .Where(x => x.Date == ms_TarixAz.MS_Tarikh.Value.ToDatetime())
                                            .OrderBy(x => x.TimeReport)
                                            .Select(x => "[" + MH_Static.GetType(x.Kind) + "-»" + x.TimeReport + "] ").Distinct())

                                        select new
                                        {
                                            i.FullName,
                                            txt,

                                        }).ToList();
            }

 

  • 1397/11/08
  • ساعت 01:47

فکر میکنم این کارتون رو راه بندازه احتمالا:

SELECT employe.Name,entrance.Time 
FROM employe,entrance
WHERE employe.Id=entrance.EmployeId

 


  • 1397/11/08
  • ساعت 07:48

ممنون دوست عزیز اما این کوئری که شما گفتین خیلی سادست من منظورم اینجوریست

نمونه اجرای برنامه
نام و نام خانوادگیشزح تردد
محسن هرمزی[ورود »07:30] ، [خروج »17:03]
علی محمدی[ورود »07:31] ، [شروع ماموریت »09:45] ، [ورود ماموریت »12:55] ، [خروج » 17:00]
  

نمونه اجرای برنامه


  • 1397/11/30
  • ساعت 13:48

ممنون اما خودم یک راهی پیدا کردم و جواب داد و سرعت تهیه گزارشم از 15 الی 20 ثانیه به 1 الی 2 ثانیه تغییر کرد

1 - اول اومدم یک View ساختم

SELECT TAV.FK_Devic,
       TP.FK_Shift,
       TP.Code,
       RTRIM(LTRIM(TP.FullName)) AS FullName,
       TAV.Date,
       TD.FADate,
       TD.FADayOfWike,
       TAV.Time,
       RTRIM(LTRIM(TAV.TimeReport)) AS TimeReport,
       RTRIM(LTRIM(TKIO.Title)) AS Kind,
       TAV.IsEdit,
       TAV.IsAdd,
       TAV.IsDelete,
       TAV.ID
FROM dbo.Tbl_All_Vorudi AS TAV
    INNER JOIN dbo.Tbl_Personel AS TP
        ON TP.Code = TAV.PersonelCode
    INNER JOIN dbo.Tbl_Date AS TD
        ON TD.ENDate = TAV.Date
    INNER JOIN dbo.Tbl_Kind_In_Ot AS TKIO
        ON TKIO.ID = TAV.Kind;

2 - بعد یک sp ساختم که از روی view دیتا هارو مرتب می کند

CREATE FUNCTION [dbo].[MS_Get_In_Ot]
(
    @Code INT,
    @DateAz DATE,
    @DateTa DATE
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @TitleType NVARCHAR(MAX);
    SELECT @TitleType = COALESCE(@TitleType + ' , ', ' ') + '[' + TAV.TimeReport + '» ' + TAV.TitleKind + ']'
    FROM dbo.View_In_Ot_Kind AS TAV
	
    WHERE TAV.PersonelCode = @Code
          AND TAV.Date >= @DateAz
          AND TAV.Date <= @DateTa
          AND TAV.IsDelete = 0
		  ORDER BY TAV.TimeReport
		  
    RETURN (@TitleType);
END;

3 - در نهایت در سی شارپ کدم رو به این شیوه نوشتم

using (var db = new DB_ClockMHDataContext(MH_Static.Constr))
            {
                var list = db.Tbl_Personels.Where(x => x.isActive);
                if (fkShift > 0)
                    list = list.Where(x => x.FK_Shift == fkShift);
                mS_GridX1.DataSource = (from i in list
                                        let txt = db.MS_Get_In_Ot(i.Code, DateAz, DateTa)

                                        select new
                                        {
                                            i.FullName,
                                            txt,

                                        }).ToList();
            }

 


logo-enamadlogo-samandehi