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,038

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


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

 
Topic : 135399



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



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



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

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

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

Code (SQL)
01.   public function FSaMPRGDataTable($paData, $paDataDpcDisCodeYSet){
02.         
03.        $tDpcDisCodeYSet  = $paDataDpcDisCodeYSet;
04.        print_r($tDpcDisCodeYSet);       
05. 
06.        $nLngID  = $paData['FNLngID'];
07. 
08.        $tSQL = " SELECT  PPV.*,
09.                    PLL.FTDisName, 
10.                    CASE PLC.FTDisGroup
11.                        WHEN 1 THEN 'ITEM'
12.                        WHEN 2 THEN 'PROMOTION'
13.                        WHEN 3 THEN 'SUB'
14.                        ELSE 'N/A'
15.                        END AS FTDisGroup,
16.                    CASE WHEN PLC.FTDisStaPrice = 1 THEN 'Full Price/Set Price' ELSE 'Net Peice' END AS FTDisStaPrice
17.                FROM (
18.                    SELECT 
19.                          --แทนค่าตัวแปร tYColumnShow ตรงนี้
20.                        FTDpcDisCodeX,
21.                        FTDpcDisCodeY1,
22.                        FTDpcStaAlw1,
23.                        FTDpcDisCodeY2,
24.                        FTDpcStaAlw2,
25.                        FTDpcDisCodeY3,
26.                        FTDpcStaAlw3,
27.                        FTDpcDisCodeY4,
28.                        FTDpcStaAlw4,
29.                        FTDpcDisCodeY5,
30.                        FTDpcStaAlw5,
31.                        FTDpcDisCodeY6,
32.                        FTDpcStaAlw6
33.                    FROM(
34.                        SELECT FTDpcDisCodeX,
35.                            col + CAST(seq AS VARCHAR(10)) AS col,
36.                            value
37.                        FROM
38.                        (
39.                        SELECT FTDpcDisCodeX,
40.                            FTDpcStaAlw,
41.                            FTDpcDisCodeY,
42.                            ROW_NUMBER() OVER(PARTITION BY FTDpcDisCodeX
43.                            ORDER BY FTDpcDisCodeX) seq
44.                        FROM TPSTDiscPolicy
45.                    ) d
46.                    CROSS APPLY
47.                    (
48.                    SELECT 'FTDpcStaAlw',
49.                        CAST(FTDpcStaAlw AS VARCHAR(20))
50.                    UNION ALL
51.                    SELECT 'FTDpcDisCodeY',
52.                        FTDpcDisCodeY
53.                ) c(col, value)
54.                    ) src PIVOT(MAX(value) FOR col IN(
55.                        $tDpcDisCodeYSet
56.                     )) piv ) PPV
57.            INNER JOIN TSysDisPolicy PLC ON PPV.FTDpcDisCodeX = PLC.FTDisCode
58.            INNER JOIN TSysDisPolicy_L PLL ON PPV.FTDpcDisCodeX = PLL.FTDisCode AND PLL.FNLngID = $nLngID
59.        ";
60.        $oQuery = $this->db->query($tSQL);
61. 
62. 
63.}




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 : 693 Reply : 15
 

 

No. 1



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



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

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

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


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

Code (PHP)
1.//...
2.$tDpcDisCodeYSet  = $paDataDpcDisCodeYSet;
3.$tDpcDisCodeYSet = str_replace(",", "','", $tDpcDisCodeYSet);
4.$tDpcDisCodeYSet = str_replace($tDpcDisCodeYSet, "'".$tDpcDisCodeYSet."'", $tDpcDisCodeYSet);
5.//...

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
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)
01.) src PIVOT(MAX(value) FOR col IN(
02.           FTDpcDisCodeY1,
03.           FTDpcStaAlw1,
04.           FTDpcDisCodeY2,
05.           FTDpcStaAlw2,
06.           FTDpcDisCodeY3,
07.           FTDpcStaAlw3,
08.           FTDpcDisCodeY4,
09.           FTDpcStaAlw4,
10.           FTDpcDisCodeY5,
11.           FTDpcStaAlw5,
12.           FTDpcDisCodeY6,
13.           FTDpcStaAlw6
14.       )) 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,590 )
บทความ ( 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)
01.$tDpcDisCodeYSet = '';
02.     if($aResultData['rtCode'] == 1){
03.         foreach($aResultData['raItems'] AS $key=>$aValue){
04.             for ($i=1; $i<=$aValue['FTDpcDisCodeY']; $i++){
05.                 $tDpcDisCodeYSet = 'FTDpcDisCodeY' . $i.',' . 'FTDpcStaAlw'.$i ;
06.                 if($i < $aValue['FTDpcDisCodeY']){
07.                     $tDpcDisCodeYSet.= ',';
08.                 }
09.                 $tYColumnShow = $tDpcDisCodeYSet;
10.                 $aDatatable   = $this->mDiscountpolicy->FSaMPRGDataTable($aData, $tDpcDisCodeYSet, $tYColumnShow);   
11.                  
12.             }
13.              
14.         }
15.     }


Code (SQL)
01.public function FSaMPRGDataTable($paData, $paDataDpcDisCodeYSet, $paDataYColumnShow){
02. 
03.       // $tDpcDisCodeYSet  = $paDataDpcDisCodeYSet;
04.       // $tDpcDisCodeYSet = str_replace(",", "','", $tDpcDisCodeYSet);
05.       // $tDpcDisCodeYSet = str_replace($tDpcDisCodeYSet, "'".$tDpcDisCodeYSet."'", $tDpcDisCodeYSet);
06.       // print_r($paDataDpcDisCodeYSet);
07. 
08.       $nLngID  = $paData['FNLngID'];
09. 
10.       $tSQL = " SELECT  PPV.*,
11.                   PLL.FTDisName, 
12.                   CASE PLC.FTDisGroup
13.                       WHEN 1 THEN 'ITEM'
14.                       WHEN 2 THEN 'PROMOTION'
15.                       WHEN 3 THEN 'SUB'
16.                       ELSE 'N/A'
17.                       END AS FTDisGroup,
18.                   CASE WHEN PLC.FTDisStaPrice = 1 THEN 'Full Price/Set Price' ELSE 'Net Peice' END AS FTDisStaPrice
19.               FROM (
20.                   SELECT 
21.                         --แทนค่าตัวแปร tYColumnShow ตรงนี้
22.                       FTDpcDisCodeX,
23.                       FTDpcDisCodeY1,
24.                       FTDpcStaAlw1,
25.                       FTDpcDisCodeY2,
26.                       FTDpcStaAlw2,
27.                       FTDpcDisCodeY3,
28.                       FTDpcStaAlw3,
29.                       FTDpcDisCodeY4,
30.                       FTDpcStaAlw4,
31.                       FTDpcDisCodeY5,
32.                       FTDpcStaAlw5,
33.                       FTDpcDisCodeY6,
34.                       FTDpcStaAlw6
35.                   FROM(
36.                       SELECT FTDpcDisCodeX,
37.                           col + CAST(seq AS VARCHAR(10)) AS col,
38.                           value
39.                       FROM
40.                       (
41.                       SELECT FTDpcDisCodeX,
42.                           FTDpcStaAlw,
43.                           FTDpcDisCodeY,
44.                           ROW_NUMBER() OVER(PARTITION BY FTDpcDisCodeX
45.                           ORDER BY FTDpcDisCodeX) seq
46.                       FROM TPSTDiscPolicy
47.                   ) d
48.                   CROSS APPLY
49.                   (
50.                   SELECT 'FTDpcStaAlw',
51.                       CAST(FTDpcStaAlw AS VARCHAR(20))
52.                   UNION ALL
53.                   SELECT 'FTDpcDisCodeY',
54.                       FTDpcDisCodeY
55.               ) c(col, value)
56.                   ) src PIVOT(MAX(value) FOR col IN(
57.                       $tDpcDisCodeYSet
58.                   )) piv ) PPV
59.           INNER JOIN TSysDisPolicy PLC ON PPV.FTDpcDisCodeX = PLC.FTDisCode
60.           INNER JOIN TSysDisPolicy_L PLL ON PPV.FTDpcDisCodeX = PLL.FTDisCode AND PLL.FNLngID = $nLngID
61.       ";
62.       $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)
01.$tDpcDisCodeYSet = '';
02.     if($aResultData['rtCode'] == 1){
03.         foreach($aResultData['raItems'] AS $key=>$aValue){
04.             for ($i=1; $i<=$aValue['FTDpcDisCodeY']; $i++){
05.                 $tDpcDisCodeYSet = 'FTDpcDisCodeY' . $i.',' . 'FTDpcStaAlw'.$i ;
06.                 if($i < $aValue['FTDpcDisCodeY']){
07.                     $tDpcDisCodeYSet.= ',';
08.                 }
09.                 $tYColumnShow = $tDpcDisCodeYSet;
10.                 $aDatatable   = $this->mDiscountpolicy->FSaMPRGDataTable($aData, $tDpcDisCodeYSet, $tYColumnShow);   
11.                  
12.             }
13.              
14.         }
15.     }


4





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

 

No. 9



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



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

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

Code (PHP)
01.$tDpcDisCodeYSet = '';
02.     if($aResultData['rtCode'] == 1){
03.         foreach($aResultData['raItems'] AS $key=>$aValue){
04.             for ($i=1; $i<=$aValue['FTDpcDisCodeY']; $i++){
05.                 $tDpcDisCodeYSet = 'FTDpcDisCodeY' . $i.',' . 'FTDpcStaAlw'.$i ;
06.                 if($i < $aValue['FTDpcDisCodeY']){
07.                     $tDpcDisCodeYSet.= ',';
08.                 }
09.                 echo $tDpcDisCodeYSet; // ดูว่ามี , ห้อยท้ายหรือไม่
10.                 //$tYColumnShow = $tDpcDisCodeYSet;
11.                 //$aDatatable   = $this->mDiscountpolicy->FSaMPRGDataTable($aData, $tDpcDisCodeYSet, $tYColumnShow);   
12.                  
13.             }
14.              
15.         }
16.     }
17.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,590 )
บทความ ( 2 )



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


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

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

 

No. 13



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



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

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

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


ถ้ายังติด 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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





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