顯示具有 order by 標籤的文章。 顯示所有文章
顯示具有 order by 標籤的文章。 顯示所有文章

2022年9月12日 星期一

V80C03 - 顯示資料 - 分頁不正確

 目的: 顯示資料的分頁處理(RNK), RNK 必需為唯一, 即 order by 必需為 PK

處理說明:  1>*.cs 顯示資料的 SQL  , RNK 必需為唯一 , 即 order by 必需為 PK 



1>*.cs
[HttpPost]
        public dynamic getGridData_M(bool par_paging= true)
        {
        
Sql = " SELECT  RNK,     "
                          + " ACNO,SAPNO,AMMNO,ITM,PN,MOSM, PLANNINGCARD,AREA, TEAM,CRITCL,BSDT,BEDT,STAFF,HRS,STDHRS,DURAION,STARTDAY,ENDDAY,INSDT, CLS,  "
                            + "  GRP,FOREMAN1,TEAM,LDMAN1,EMPLYID,DT,CLSRM,PATCHMAN,ASHR,REMARK,PTY,CREWBOARDSDT "
                            + "  FROM  ( "
+"select  dense_rank()  over(order by  nvl(d.STARTVAL,d.ACNO),d.SAPNO,a.AMMNO,a.ITM,b.EMPLYID,b.DT) as RNK,"
//+ "select  dense_rank()  over(order by  nvl(d.STARTVAL,d.ACNO),d.SAPNO) as RNK,"   //非唯一,分頁會有問題
                                                   + "   nvl(d.STARTVAL,d.ACNO) as ACNO, d.SAPNO,d.PTY,d.CREWBOARDSDT, "
                                                   + "  a.AMMNO,a.ITM,a.PN,a.MOSM,a.PLANNINGCARD,a.AREA, a.TEAM,a.CRITCL,a.BSDT,a.BEDT,a.STAFF,a.HRS,a.STDHRS,a.DURAION,a.STARTDAY,a.ENDDAY,a.INSDT, a.CLS, "
                                                   + "  b.GRP,b.FOREMAN1,b.TEAM as bTEAM,b.LDMAN1,b.EMPLYID,b.DT,b.CLSRM,b.PATCHMAN,b.ASHR,b.REMARK "
                                       + "  from AMM_CREW a, AMM_SRO d,  "
                                                   + " (select    a.AMMNO,a.ITM,a.GRP,b.FOREMAN1,a.TEAM,c.LDMAN1,a.EMPLYID,a.DT,a.CLSRM,a.PATCHMAN,a.ASHR,a.REMARK  "
                                                   + "  from      AMM_CREWD a, AMM_CREWGRP b,AMM_CREWTEAM c "
                                                   + "   where   a.GRP = b.GRP and a.TEAM = c.TEAM) b  "
                                      + "   where  a.AMMNO = b.AMMNO(+)  "
                                      + "   and       a.ITM = b.ITM(+)   "
                                      + "   and      a.AMMNO=d.AMMNO  ";                                    
            //AMM單號
            if (!myfunc.checkisnull(Tmp_AMMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.AMMNO=" + myfunc.AA(Tmp_AMMNO);
            };
            //分工單計畫開始日   起~迄
            if ((!myfunc.checkisnull(Tmp_BEDT1)) || (!myfunc.checkisnull(Tmp_BEDT2)))
            {
                if (!myfunc.checkisnull(Tmp_BEDT1))
                {
                    Tmp_Sql = Tmp_Sql + " AND   A.BEDT  >=" + myfunc.AA(Tmp_BEDT1);
                }
                if (!myfunc.checkisnull(Tmp_BEDT2))
                {
                    Tmp_Sql = Tmp_Sql + " AND   A.BEDT  <=" + myfunc.AA(Tmp_BEDT2);
                }
            };
            //施工日期   起~迄
            if ((!myfunc.checkisnull(Tmp_DT1)) || (!myfunc.checkisnull(Tmp_DT2)))
            {
                if (!myfunc.checkisnull(Tmp_DT1))
                {
                    Tmp_Sql = Tmp_Sql + " AND   B.DT  >=" + myfunc.AA(Tmp_DT1);
                }
                if (!myfunc.checkisnull(Tmp_DT2))
                {
                    Tmp_Sql = Tmp_Sql + " AND   B.DT  <=" + myfunc.AA(Tmp_DT2);
                }
            };
            //區域
            if (!myfunc.checkisnull(Tmp_AREA))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.AREA=" + myfunc.AA(Tmp_AREA);
            };
            //發工件號
            if (!myfunc.checkisnull(Tmp_PN))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.PN=" + myfunc.AA(Tmp_PN);
            };
            //CREWBOARD起始天   起~迄
            if ((!myfunc.checkisnull(Tmp_PLANDAY1)) || (!myfunc.checkisnull(Tmp_PLANDAY2)))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.PN  IN  (SELECT  DISTINCT PLANNINGCARD FROM   AMM_PLANCARD  WHERE  1=1 ";
                if (!myfunc.checkisnull(Tmp_PLANDAY1))
                {
                    Tmp_Sql = Tmp_Sql + " AND   PLANDAY  >=" + myfunc.AA(Tmp_PLANDAY1);
                }
                if (!myfunc.checkisnull(Tmp_PLANDAY2))
                {
                    Tmp_Sql = Tmp_Sql + " AND   PLANDAY  <=" + myfunc.AA(Tmp_PLANDAY2);
                }
                Tmp_Sql = Tmp_Sql + " ) ";
            };
            //TEAM
            if (!myfunc.checkisnull(Tmp_TEAM))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.TEAM=" + myfunc.AA(Tmp_TEAM);
            };
            //領班 FOREMAN1 of   AMM_CREWGRP.GRP
            if (!myfunc.checkisnull(Tmp_FOREMAN1))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.GRP  IN (SELECT GRP FROM  AMM_CREWGRP  WHERE  FOREMAN1=" + myfunc.AA(Tmp_FOREMAN1) + ")";
            };
            //小組長 LDMAN1 of  AMM_CREWTEAM.TEAM
            if (!myfunc.checkisnull(Tmp_LDMAN1))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.TEAM  IN (SELECT TEAM FROM  AMM_CREWTEAM  WHERE  LDMAN1=" + myfunc.AA(Tmp_LDMAN1) + ")";
            };
            // AMM_SRO的過濾條件
            //機號 & 工號
            if ((!myfunc.checkisnull(Tmp_ACNO)) || (!myfunc.checkisnull(Tmp_SAPNO)) ||
                  (!myfunc.checkisnull(Tmp_PTY1)) || (!myfunc.checkisnull(Tmp_PTY2)) ||
                  (!myfunc.checkisnull(Tmp_CREWBOARDSDT1)) || (!myfunc.checkisnull(Tmp_CREWBOARDSDT2)))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.AMMNO  IN (SELECT AMMNO FROM  AMM_SRO WHERE  1=1 ";
                if (!myfunc.checkisnull(Tmp_ACNO))
                {
                    Tmp_Sql = Tmp_Sql + " AND   nvl(STARTVAL,ACNO)=" + myfunc.AA(Tmp_ACNO);
                };
                if (!myfunc.checkisnull(Tmp_SAPNO))
                {
                    Tmp_Sql = Tmp_Sql + " AND   SAPNO=" + myfunc.AA(Tmp_SAPNO);
                };
                if (!myfunc.checkisnull(Tmp_PTY1))
                {
                    Tmp_Sql = Tmp_Sql + " AND   PTY>=" + Tmp_PTY1;
                };
                if (!myfunc.checkisnull(Tmp_PTY2))
                {
                    Tmp_Sql = Tmp_Sql + " AND   PTY<=" + Tmp_PTY2;
                };
                if (!myfunc.checkisnull(Tmp_CREWBOARDSDT1))
                {
                    Tmp_CREWBOARDSDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(Tmp_CREWBOARDSDT1));
                    Tmp_Sql = Tmp_Sql + " AND   CREWBOARDSDT>=" + myfunc.AA(Tmp_CREWBOARDSDT1);
                };
                if (!myfunc.checkisnull(Tmp_CREWBOARDSDT2))
                {
                    Tmp_CREWBOARDSDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(Tmp_CREWBOARDSDT2));
                    Tmp_Sql = Tmp_Sql + " AND   CREWBOARDSDT<=" + myfunc.AA(Tmp_CREWBOARDSDT2);
                };
                Tmp_Sql = Tmp_Sql + " )";
            }

            Tmp_Sql = Tmp_Sql + "   )   ";                                                     
            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //匯出時 ,取全部資料, par_paging =true
            DataSet ds = getDataTable(cmd, countSql, par_paging);