 |
[PHP]
SQL Pivot แทนค่า แล้วใส่ ค่า Statment query ไม่ได้ |
|
 |
|
|
 |
 |
|
สอบถามครับ ใช่ CodeIgniter เขียน
ผมส่ง Data มาที่ model ได้ค่ามาแล้ว แต่ไป ยัดค่าใส่ query pivot (ปัญหาคือ data ที่ใส่ query มาไม่ครบ)
ข้อมูลที่จะใส่ query

query error data มาไม่ครบ

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
|
 |
 |
 |
 |
Date :
2020-07-19 13:05:22 |
By :
Mariner |
View :
693 |
Reply :
15 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-07-19 14:56:11
รายละเอียดของการตอบ ::
ไม่ได้อ่ะครับพี่
echo data มาดูครบครับ แต่พอเอาไปแทน ข้อมูลเข้าไปไม่ครบ ผมก็งง
ค่าที่ออกมาต้องประมาณนี้ครับ
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ครั้งแรก Incorrect syntax near ')'
คราวนี้ขึ้นว่าอะไรครับ
และถ้าเชื่อม query string กับตัวแปรด้วย . ได้หรือไม่
|
ประวัติการแก้ไข 2020-07-19 15:29:19
 |
 |
 |
 |
Date :
2020-07-19 15:27:31 |
By :
PhrayaDev |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
$paDataDpcDisCodeYSet ตัวแปรตัวนี้ มัน gen มาผิด ติดคอมม่าเกินมา 1 ตัว
|
 |
 |
 |
 |
Date :
2020-07-19 16:02:42 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 4 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-07-19 16:02:42
รายละเอียดของการตอบ ::
ก่อนหน้านั้น ผมส่งมาไม่น่าผิดนะครับ
จาก 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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 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. }
|
 |
 |
 |
 |
Date :
2020-07-19 17:12:48 |
By :
Mariner |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
พิสูจน์ต้นฉบับ
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.
11.
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|