Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > SQL Pivot แทนค่า แล้วใส่ ค่า Statment query ไม่ได้



 

SQL Pivot แทนค่า แล้วใส่ ค่า Statment query ไม่ได้

 



Topic : 135399



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์




สอบถามครับ ใช่ CodeIgniter เขียน
ผมส่ง Data มาที่ model ได้ค่ามาแล้ว แต่ไป ยัดค่าใส่ query pivot (ปัญหาคือ data ที่ใส่ query มาไม่ครบ)

ข้อมูลที่จะใส่ query
1

query error data มาไม่ครบ
2

Code (SQL)
   public function FSaMPRGDataTable($paData, $paDataDpcDisCodeYSet){
        
        $tDpcDisCodeYSet  = $paDataDpcDisCodeYSet;
        print_r($tDpcDisCodeYSet);        

        $nLngID  = $paData['FNLngID'];

        $tSQL = " SELECT  PPV.*,
                    PLL.FTDisName,  
                    CASE PLC.FTDisGroup 
                        WHEN 1 THEN 'ITEM'
                        WHEN 2 THEN 'PROMOTION'
                        WHEN 3 THEN 'SUB'
                        ELSE 'N/A'
                        END AS FTDisGroup,
                    CASE WHEN PLC.FTDisStaPrice = 1 THEN 'Full Price/Set Price' ELSE 'Net Peice' END AS FTDisStaPrice
                FROM (
                    SELECT  
                          --แทนค่าตัวแปร tYColumnShow ตรงนี้
                        FTDpcDisCodeX, 
                        FTDpcDisCodeY1,
                        FTDpcStaAlw1,
                        FTDpcDisCodeY2,
                        FTDpcStaAlw2, 
                        FTDpcDisCodeY3,
                        FTDpcStaAlw3, 
                        FTDpcDisCodeY4,
                        FTDpcStaAlw4, 
                        FTDpcDisCodeY5,
                        FTDpcStaAlw5, 
                        FTDpcDisCodeY6,
                        FTDpcStaAlw6
                    FROM(
                        SELECT FTDpcDisCodeX, 
                            col + CAST(seq AS VARCHAR(10)) AS col, 
                            value
                        FROM
                        (
                        SELECT FTDpcDisCodeX, 
                            FTDpcStaAlw, 
                            FTDpcDisCodeY, 
                            ROW_NUMBER() OVER(PARTITION BY FTDpcDisCodeX
                            ORDER BY FTDpcDisCodeX) seq
                        FROM TPSTDiscPolicy
                    ) d
                    CROSS APPLY
                    (
                    SELECT 'FTDpcStaAlw', 
                        CAST(FTDpcStaAlw AS VARCHAR(20))
                    UNION ALL
                    SELECT 'FTDpcDisCodeY', 
                        FTDpcDisCodeY
                ) c(col, value)
                    ) src PIVOT(MAX(value) FOR col IN( 
                        $tDpcDisCodeYSet
                     )) piv ) PPV
            INNER JOIN TSysDisPolicy PLC ON PPV.FTDpcDisCodeX = PLC.FTDisCode
            INNER JOIN TSysDisPolicy_L PLL ON PPV.FTDpcDisCodeX = PLL.FTDisCode AND PLL.FNLngID = $nLngID
        ";
        $oQuery = $this->db->query($tSQL);


}




Tag : PHP, Ms SQL Server 2016, CodeIgniter









ประวัติการแก้ไข
2020-07-19 13:06:49
2020-07-19 13:08:19
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2020-07-19 13:05:22 By : Mariner View : 650 Reply : 15
 

 

No. 1



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

IN operator ถ้าไม่ใช่ array ก็ต้องใส่ single quote ให้กับ value ด้วย

Code (SQL)
...IN ('Germany', 'France', 'UK');


$paDataDpcDisCodeYSet ที่รับมาเป็น string (ไม่ใช่ array) อยู่แล้วก็ replace เลย

Code (PHP)
//...
$tDpcDisCodeYSet  = $paDataDpcDisCodeYSet;
$tDpcDisCodeYSet = str_replace(",", "','", $tDpcDisCodeYSet);
$tDpcDisCodeYSet = str_replace($tDpcDisCodeYSet, "'".$tDpcDisCodeYSet."'", $tDpcDisCodeYSet);
//...







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 14:56:11 By : PhrayaDev
 


 

No. 2



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-07-19 14:56:11
รายละเอียดของการตอบ ::
ไม่ได้อ่ะครับพี่
echo data มาดูครบครับ แต่พอเอาไปแทน ข้อมูลเข้าไปไม่ครบ ผมก็งง


3

ค่าที่ออกมาต้องประมาณนี้ครับ

Code (SQL)
             ) src PIVOT(MAX(value) FOR col IN(
                        FTDpcDisCodeY1,
                        FTDpcStaAlw1,
                        FTDpcDisCodeY2,
                        FTDpcStaAlw2, 
                        FTDpcDisCodeY3,
                        FTDpcStaAlw3, 
                        FTDpcDisCodeY4,
                        FTDpcStaAlw4, 
                        FTDpcDisCodeY5,
                        FTDpcStaAlw5, 
                        FTDpcDisCodeY6,
                        FTDpcStaAlw6
                    )) piv ) PPV






ประวัติการแก้ไข
2020-07-19 15:24:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 15:19:57 By : Mariner
 

 

No. 3



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ครั้งแรก Incorrect syntax near ')'

คราวนี้ขึ้นว่าอะไรครับ

และถ้าเชื่อม query string กับตัวแปรด้วย . ได้หรือไม่


ประวัติการแก้ไข
2020-07-19 15:29:19
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 15:27:31 By : PhrayaDev
 


 

No. 4



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


$paDataDpcDisCodeYSet ตัวแปรตัวนี้ มัน gen มาผิด ติดคอมม่าเกินมา 1 ตัว
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 16:02:42 By : Chaidhanan
 


 

No. 5



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-07-19 16:02:42
รายละเอียดของการตอบ ::
ก่อนหน้านั้น ผมส่งมาไม่น่าผิดนะครับ
4


จาก controler ส่งมา model
Code (PHP)
       $tDpcDisCodeYSet = '';
            if($aResultData['rtCode'] == 1){
                foreach($aResultData['raItems'] AS $key=>$aValue){
                    for ($i=1; $i<=$aValue['FTDpcDisCodeY']; $i++){
                        $tDpcDisCodeYSet = 'FTDpcDisCodeY' . $i.',' . 'FTDpcStaAlw'.$i ;
                        if($i < $aValue['FTDpcDisCodeY']){
                            $tDpcDisCodeYSet.= ',';
                        }
                        $tYColumnShow = $tDpcDisCodeYSet;
                        $aDatatable   = $this->mDiscountpolicy->FSaMPRGDataTable($aData, $tDpcDisCodeYSet, $tYColumnShow);    
                        
                    }
                    
                }
            }



Code (SQL)
 public function FSaMPRGDataTable($paData, $paDataDpcDisCodeYSet, $paDataYColumnShow){

        // $tDpcDisCodeYSet  = $paDataDpcDisCodeYSet;
        // $tDpcDisCodeYSet = str_replace(",", "','", $tDpcDisCodeYSet);
        // $tDpcDisCodeYSet = str_replace($tDpcDisCodeYSet, "'".$tDpcDisCodeYSet."'", $tDpcDisCodeYSet);
        // print_r($paDataDpcDisCodeYSet);

        $nLngID  = $paData['FNLngID'];

        $tSQL = " SELECT  PPV.*,
                    PLL.FTDisName,  
                    CASE PLC.FTDisGroup 
                        WHEN 1 THEN 'ITEM'
                        WHEN 2 THEN 'PROMOTION'
                        WHEN 3 THEN 'SUB'
                        ELSE 'N/A'
                        END AS FTDisGroup,
                    CASE WHEN PLC.FTDisStaPrice = 1 THEN 'Full Price/Set Price' ELSE 'Net Peice' END AS FTDisStaPrice
                FROM (
                    SELECT  
                          --แทนค่าตัวแปร tYColumnShow ตรงนี้
                        FTDpcDisCodeX, 
                        FTDpcDisCodeY1,
                        FTDpcStaAlw1,
                        FTDpcDisCodeY2,
                        FTDpcStaAlw2, 
                        FTDpcDisCodeY3,
                        FTDpcStaAlw3, 
                        FTDpcDisCodeY4,
                        FTDpcStaAlw4, 
                        FTDpcDisCodeY5,
                        FTDpcStaAlw5, 
                        FTDpcDisCodeY6,
                        FTDpcStaAlw6
                    FROM(
                        SELECT FTDpcDisCodeX, 
                            col + CAST(seq AS VARCHAR(10)) AS col, 
                            value
                        FROM
                        (
                        SELECT FTDpcDisCodeX, 
                            FTDpcStaAlw, 
                            FTDpcDisCodeY, 
                            ROW_NUMBER() OVER(PARTITION BY FTDpcDisCodeX
                            ORDER BY FTDpcDisCodeX) seq
                        FROM TPSTDiscPolicy
                    ) d
                    CROSS APPLY
                    (
                    SELECT 'FTDpcStaAlw', 
                        CAST(FTDpcStaAlw AS VARCHAR(20))
                    UNION ALL
                    SELECT 'FTDpcDisCodeY', 
                        FTDpcDisCodeY
                ) c(col, value)
                    ) src PIVOT(MAX(value) FOR col IN(
                        $tDpcDisCodeYSet
                    )) piv ) PPV
            INNER JOIN TSysDisPolicy PLC ON PPV.FTDpcDisCodeX = PLC.FTDisCode
            INNER JOIN TSysDisPolicy_L PLL ON PPV.FTDpcDisCodeX = PLL.FTDisCode AND PLL.FNLngID = $nLngID
        ";
        $oQuery = $this->db->query($tSQL);







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 16:14:28 By : Mariner
 


 

No. 6



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-07-19 15:27:31
รายละเอียดของการตอบ ::
ของพี่ข้อมูลเข้าไม่ครบอ่ะครับ ทำให้คอมม่า เกินอ่ะครับ
5

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 16:17:58 By : Mariner
 


 

No. 7



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ตอบความคิดเห็นที่ : 6 เขียนโดย : Mariner เมื่อวันที่ 2020-07-19 16:17:58
รายละเอียดของการตอบ ::
ถึงบอกให้รวม string ด้วยจุดไงครับ...ลองดู

$query = "string1" . $string2 . "string3";


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 16:46:41 By : PhrayaDev
 


 

No. 8



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-07-19 16:46:41
รายละเอียดของการตอบ ::
ขอถามอีกนิดนะครับ ขอมูลมัน loopแล้วส่งมาได้ค่าที่ต้องการแล้ว แต่แค่ไป ยัดใส่ใน query
ผมก็เลยไม่แน่ใจว่าเป็น เพราะอะไร
Code (PHP)
       $tDpcDisCodeYSet = '';
            if($aResultData['rtCode'] == 1){
                foreach($aResultData['raItems'] AS $key=>$aValue){
                    for ($i=1; $i<=$aValue['FTDpcDisCodeY']; $i++){
                        $tDpcDisCodeYSet = 'FTDpcDisCodeY' . $i.',' . 'FTDpcStaAlw'.$i ;
                        if($i < $aValue['FTDpcDisCodeY']){
                            $tDpcDisCodeYSet.= ',';
                        }
                        $tYColumnShow = $tDpcDisCodeYSet;
                        $aDatatable   = $this->mDiscountpolicy->FSaMPRGDataTable($aData, $tDpcDisCodeYSet, $tYColumnShow);    
                        
                    }
                    
                }
            }



4





แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 17:12:48 By : Mariner
 


 

No. 9



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

พิสูจน์ต้นฉบับ

Code (PHP)
$tDpcDisCodeYSet = '';
     if($aResultData['rtCode'] == 1){
         foreach($aResultData['raItems'] AS $key=>$aValue){
             for ($i=1; $i<=$aValue['FTDpcDisCodeY']; $i++){
                 $tDpcDisCodeYSet = 'FTDpcDisCodeY' . $i.',' . 'FTDpcStaAlw'.$i ;
                 if($i < $aValue['FTDpcDisCodeY']){
                     $tDpcDisCodeYSet.= ',';
                 }
                 echo $tDpcDisCodeYSet; // ดูว่ามี , ห้อยท้ายหรือไม่
                 //$tYColumnShow = $tDpcDisCodeYSet;
                 //$aDatatable   = $this->mDiscountpolicy->FSaMPRGDataTable($aData, $tDpcDisCodeYSet, $tYColumnShow);    
                 
             }
             
         }
     }
echo $tDpcDisCodeYSet; // ตรงนี้ด้วย ดูว่ามี , ห้อยท้ายหรือไม่



ประวัติการแก้ไข
2020-07-19 17:21:23
2020-07-19 17:22:14
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 17:19:21 By : PhrayaDev
 


 

No. 10



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-07-19 17:19:21
รายละเอียดของการตอบ ::

ไม่มี comma ห้อยท้ายครับพี่ ผมก็ไม่เข้าใจเหมือนกัน พอไปแทนค่าใน statment กลับมีค่าแค่ 2 ค่า
8


95





ประวัติการแก้ไข
2020-07-19 17:30:24
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 17:29:39 By : Mariner
 


 

No. 11



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ถ้าใช้ heredoc ล่ะครับ ผลเป็นยังไง
https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 17:44:19 By : PhrayaDev
 


 

No. 12



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


Code (PHP)
$rs_array = [];
for($i = 0; $i < $target; $i++){
  $rs_array[] = 'abc' . ',' . 'xyz'; 
}
echo implode(',', $rs_array);


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 19:37:18 By : Chaidhanan
 


 

No. 13



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ดูๆ ไป เริ่มสงสัยว่า error ไม่ได้โกหก

Code (PHP)
$tSQL="...
PIVOT(MAX(value) FOR col IN( 
$tDpcDisCodeYSet  <-- ลองเปลี่ยนไปใช้แบบ hardcode --> FTDpcDisCodeY1,FTDpcStaAlw1,FTDpcDisCodeY2,FTDpcStaAlw2,...
))
..."


ถ้ายังติด error เดิมแสดงว่ามีผิดที่ statement
แต่ถ้าผ่านก็ต้องงมที่ string ต่อไป
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 20:04:06 By : PhrayaDev
 


 

No. 14



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 13 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-07-19 20:04:06
รายละเอียดของการตอบ ::
ได้แล้วครับ ขอบคุณมากนะครับที่ช่วยเหลือครับ



ประวัติการแก้ไข
2020-07-19 23:13:33
2020-07-19 23:36:12
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 23:11:58 By : Mariner
 


 

No. 15



โพสกระทู้ ( 95 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 12 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-07-19 19:37:18
รายละเอียดของการตอบ ::
ได้แล้วครับ ใช้ implode ของพี่ได้เลย แต่ทำใมที่ผมทำอยู่ถึงไม่ได้ครับ รูปแบบก็ออกมาเหมือนของพี่ ยังไงก็ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-07-19 23:35:34 By : Mariner
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : SQL Pivot แทนค่า แล้วใส่ ค่า Statment query ไม่ได้
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่