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

HOME > PHP > PHP Forum > สอบถามเรื่องการ select ไตรมาสหน่อยครับ ตอนนี้เริ่มเข้าใจนิดหนึ่งแล้วครับ (ตอนนี้รันผ่านไร้ปัญหาละครับ ^_^ สนใจดูแนวคิดการเลือกไตรมาสแบบไทยเชิญด้านในครับ)



 

สอบถามเรื่องการ select ไตรมาสหน่อยครับ ตอนนี้เริ่มเข้าใจนิดหนึ่งแล้วครับ (ตอนนี้รันผ่านไร้ปัญหาละครับ ^_^ สนใจดูแนวคิดการเลือกไตรมาสแบบไทยเชิญด้านในครับ)

 



Topic : 110526



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



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




ฐานข้อมูล

Code
https://www.thaicreate.com/php/forum/110523.html


จากกระทู้เมื่อของผม ผมพอเข้าใจแล้วว่า select เงื่อนไข ไตรมาส จากตารางนี้เลย

แต่พอผมลองทำครับ กลับพบ ปัญหาว่าเมื่อผมใช้ between

เช่น

select *
from tbclearbill where Clearbilldate between '2012-10-01' and '2012-12-31'


ซึ่งอันนี้ เป็นไตรมาส 1 ของปีงบประมาณครับ

แล้วถ้า สมมุติ select ไตรมาส 2 โค้ด SQL จะเป็นแบบนี้

select *
from tbclearbill where Clearbilldate between '2013-01-01' and '2012-03-31'


ซึ่งปีมันไม่เหมือนกันอะครับ เพราะ ปีงบประมาณถึงแม้จะชื่อปี 2556 ก็จริงแต่นับ ไตรมาสแรกที่ 1 ตุลาคม 2555 ครับ

Value จากค่า $_POST มันยังเป็น 2012 อยู่เลยครับ เรามีวิธี เลือกไตรมาแบบ ไม่สนใจปีไหมครับ

หรือมีฟังก์ชัน ดึงไตรมาสจากการ mysql_fetch_array ไหมครับ


ผมว่า สามตาราง มันงงมากเลยครับ คนสร้างอย่างผมยัง งงสุดๆเลยครับ จะเอามา จึ้ยกะดึ้ย ยังไงเลยครับ


Code ส่วน select ส่งค่าไปอีกไฟล์ ผ่านค่า $_POST
Code (PHP)
<select name="quarter" id="quarter">
            <option>กรุณาเลือกไตรมาส</option>
            <option value="-10-01">ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
            <option value="-01-01">ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
            <option value="-04-01">ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
            <option value="-07-01">ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
          </select>

ผมเปลี่ยน value quarter เป็น แบบนี้ครับ แล้วก็ในอีกหน้าว่าจะเอาค่า $_POST มาใส่ครับ แต่ก็ไม่ได้อะครับ มัน มีแต่เดือนเริ่มงบไม่มีเดือนจบงบอะครับ

Code (PHP)
$type = $_POST['type'];
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate BETWEEN ".$yeareng.'-'.$_POST['quarter']." AND 
ORDER BY  `tbclearbill`.`Clearbilldate` ASC 
";


อันนี้ส่วนโค้ดอีกหน้าครับ ว่าจะใช้ tbclearbill.Clearbilldate BETWEEN ".$yeareng.'-'.$_POST['quarter']." AND ครับแต่ทำไปทำมารู้สึกว่ามันจะรันไม่ผ่านอะครับ



Tag : PHP, HTML/CSS, Ajax, jQuery, Crystal Report









ประวัติการแก้ไข
2014-08-09 21:16:36
2014-08-09 21:17:09
2014-08-09 21:18:33
2014-08-09 21:19:43
2014-08-09 21:20:00
2014-08-10 13:45:04
2014-08-10 13:45:53
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-08-09 21:15:49 By : nest12345 View : 3170 Reply : 20
 

 

No. 1



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



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


Code (SQL)
select c.BudgettypeID, q.quarter, c.Budgetcategoryamount amt, sum(b.Clearbillpay) pay 
from (select 1 as quarter,  '2012-10-01' qstart, '2012-12-31' qend) q
left join tbclearbill b on b.Clearbilldate between q.start and q.qend
left join tbbudgetcategory c on c.BudgettypeID=b.BudgettypeID
group by c.BudgettypeID, q.quarter









ประวัติการแก้ไข
2014-08-09 21:37:52
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-09 21:36:56 By : Chaidhanan
 


 

No. 2



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



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


ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-08-09 21:36:56
รายละเอียดของการตอบ ::
555+ ครับพี่

จะทำตามโค้ดพี่นี้ละครับ

กระทู้นี้ ตั้งตอนยังไม่เห็นคอมเม้นของพี่อะครับ อิอิ



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-09 21:49:10 By : nest12345
 

 

No. 3



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



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


ลองดู
แก้ Code ส่วน select ส่งค่าไปอีกไฟล์ ผ่านค่า $_POST
Code (PHP)
<select name="quarter" id="quarter">
            <option>กรุณาเลือกไตรมาส</option>
            <option value="1">ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
            <option value="2">ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
            <option value="3">ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
            <option value="4">ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
          </select>Code (PHP)


แก้
Code (PHP)
$type = $_POST['type'];
$yeareng2=$yeareng-1;
$qua=$_POST['quarter'];
  switch ($qua){
  case 0:
     echo"ต้องเลือกไตรมาสก่อน";
     exit();
  case 1:
     $qua=" '$yeareng2-10-%' or dat like '$yeareng2-11-%' or dat like '$yeareng2-12-%' ";
     break;
  case 2:
     $qua=" '$yeareng-01-%' or dat like '$yeareng-02-%' or dat like '$yeareng-03-%' ";
     break;
  case 3:
     $qua=" '$yeareng-04-%' or dat like '$yeareng-05-%' or dat like '$yeareng-06-%' ";
     break;
  case 4:
     $qua=" '$yeareng-07-%' or dat like '$yeareng-08-%' or dat like '$yeareng-09-%' ";
     break;
}
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate like $qua AND 
ORDER BY  `tbclearbill`.`Clearbilldate` ASC 
";

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 03:00:30 By : chai19
 


 

No. 4



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



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



บรรทัดที่ 27
AND tbclearbill.Clearbilldate like $qua AND น่าจะมีอะไรเกินมานะครับ

$qua=" '$yeareng2-10-%' อันนี้น่าสนใจดีครับ แต่ยังกำกวมในแต่ละกรณี

กรณีที่เป็นเดือน ถ้ากำหนด 1, 2, 3, 4, ..., 12 ก็ต้องเป็นแบบนี้เสมอ
กรณีที่เป็นเดือน ถ้ากำหนด 01, 02, 03, 04, ..., 12 ก็ต้องเป็นแบบนี้เสมอ

ในกรณีวันก็เช่นเดียวกันครับ วันที่ 1, 2, 3, 4, ... 31
ในกรณีวันก็เช่นเดียวกันครับ วันที่ 01, 02, 03, 04, ... 31


และที่สำคัญที่สุดรูปแบบวันที่ต้องเป็น yyyy-mm-dd เสมอ เราไม่มีสิทธิ์ไปโต้แย้งฝรั่งเขาได้ครับ

http://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time


ประวัติการแก้ไข
2014-08-10 03:23:31
2014-08-10 03:29:46
2014-08-10 03:30:25
2014-08-10 03:35:17
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 03:21:48 By : หน้าฮี
 


 

No. 5



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



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


ลองดูหน้า HTML สำหรับ กำหนดค่าแบบนี้ คล่องตัวกว่าไหมครับ
Code (PHP)
<form method="get" >
<select name="targetYear">
<?php
$curYear=date('Y'); // current Year
$m=date('m'); // current month
if($m>9) $curYear++; // ถ้าเดือนปัจจบันเป็น เดือน 10-12 ปีงบประมาณ = ปีหน้า =  ปีบัจจุบัน + 1
$startYear=$curYear - 3; //กำหนดให้แสดงปีงบประมาณย้อนหลัง 3 ปี จากปีปัจจุบัน
for($startYear; $startYear<=$curYear; $startYear++){
	echo "<option value='$startYear'", ($startYear==$curYear ? 'SELECTED' : '' ) ,">$startYear</option>";
} // default current year
?>
</select>
<select name="quarter" id="quarter">
<option value="1" <?php echo ($m<4? 'SELECTED' : '')?> >ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
<option value="2" <?php echo ($m>3 && $m<7 ? 'SELECTED' : '')?> >ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
<option value="3" <?php echo ($m>6 && $m<10 ? 'SELECTED' : '')?> >ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
<option value="4" <?php echo ($m>9? 'SELECTED' : '')?> >ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
</select>
<input type="submit" />
</form>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 07:35:14 By : Chaidhanan
 


 

No. 6



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



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


สำหรับตัว แสดงงบ
Code (PHP)
<?php
$mnt(0, array(1, '-10-01', '-12-31'), array(0, '-01-31', '-03-31'), array(0, '-04-30', '-06-30'), array(0, '-07-31', '-09-30') );
$quarter=$_REQUEST['quarter'];
$b=$mnt[$quarter];
$targetYear=$_REQUEST['targetYear']-$b[0];
$stMnt=($targetYear).$b[1];
$enMnt=($targetYear).$b[2];

$qr="select c.BudgettypeID, c.Budgetcategoryamount amt, sum(b.Clearbillpay) pay 
from tbclearbill b 
left join tbbudgetcategory c on c.BudgettypeID=b.BudgettypeID
where b.Clearbilldate between $stMnt and $enMnt ";
?>


ทั้งนี้รูปแบบการทำงานนี้ ยังไม่สามารถ แสดงรายงานได้ครบถ้วน
เพราะถ้าเป็น ไตรมาส 2 ยอดงบประมาณคงเหลือ มันต้อง ลบ จาก ไตรมาส 1 ด้วย จะทำอย่างไรครับ
และถ้าเป็น ไตรมาส 3 และ 4 ล่ะ
ติ๊กต๊อก ติ๊กตีอก
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 07:42:22 By : Chaidhanan
 


 

No. 7



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



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


ตอบความคิดเห็นที่ : 6 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-08-10 07:42:22
รายละเอียดของการตอบ ::
ทั้งนี้รูปแบบการทำงานนี้ ยังไม่สามารถ แสดงรายงานได้ครบถ้วน
เพราะถ้าเป็น ไตรมาส 2 ยอดงบประมาณคงเหลือ มันต้อง ลบ จาก ไตรมาส 1 ด้วย จะทำอย่างไรครับ
และถ้าเป็น ไตรมาส 3 และ 4 ล่ะ
ติ๊กต๊อก ติ๊กตีอก


ถูกต้องแล้วครับ คุณตา (คุณตาคิดเหมือนผมไหมครับ เด็กคนนี้โตไปคงเป็นโปรแกรมเมอร์ที่ดีได้)

เพิ่มความอลังการให้กับหัวข้อกระทู้นี้ โดยทีความคิดของผมยังไม่ตกผลึก อทิเช่น การจัดตำแหน่งซ้าย ขวา
โดยปรกติแล้ว ตัวเลขมักจะชิดขวา รูปไอคอน etc แต่ผมมี SQL Query อยู่ในมือครับ
รายไตรมาสมันยังไม่ละเอียดพอครับ


budget_01_test


ปล. ผมยังไม่ได้นอนครับคุณตา ผมนอนไม่หลับ แม้แต่เมียยังหนีผมไปเลยครับ
(ผมไม่ได้เป็นชู้กับเมียของใครเลย ผมไม่ได้ปล้น ผมไม่ได้ข่มขืน ผมไม่ได้...)


ประวัติการแก้ไข
2014-08-10 09:05:45
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 09:00:06 By : หน้าฮี
 


 

No. 8



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



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


ขอบคุณทุกท่านจริงๆนะครับ ตื่นมาละตกใจจริงๆครับ

ขอเวลาผมประมวลผล 1 วันนะครับ

ตอนนี้ไปไม่ถูกครับ ไม่รู็จะเริ่มตรงไหนดี

ไม่รู้ยังไงจะตั้งกระทู้ถามใหม่นะครับ




ประวัติการแก้ไข
2014-08-10 09:04:53
2014-08-10 09:07:30
2014-08-10 09:12:15
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 09:00:15 By : nest12345
 


 

No. 9



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



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


ตอบความคิดเห็นที่ : 8 เขียนโดย : nest12345 เมื่อวันที่ 2014-08-10 09:00:15
รายละเอียดของการตอบ ::
ณ. วันหนึ่ง ถ้าคุณจำได้ คน/มนุษย์มีทั้งดีและชั่วในตัวเองเสมอ ไม่ยกเว้นคุณและผมและคนอื่นฯ


คน/มนุษย์มีทั้งดีและชั่วในตัวเองเสมอ และอยู่ในเวลาเดียวกันด้วย แต่ไม่มีใครเคยยอมรับ

คงมีสักคราหนึ่งที่คุณจะระลึกได้ แต่ ณ. ตอนนั้นผมคงไม่ได้อยู่บนโลกใบนี้แล้ว (ผมคงตายห่าไปแล้ว)


ประวัติการแก้ไข
2014-08-10 10:16:17
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 10:15:20 By : หน้าฮี
 


 

No. 10



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



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


Code
ตอนนี้ไปไม่ถูกครับ ไม่รู็จะเริ่มตรงไหนดี ไม่รู้ยังไงจะตั้งกระทู้ถามใหม่นะครับ


ทุกคำอธิบายของผมเป็นมิตรสำหรับคุณครับ
ไม่รู้จะเริ่มตรงไหนดี คุณก็ได้เกรด A แล้วครับ ค่อยฯคิดและทำไป

ผมอ้อมไปอ้อมมา สาเหตุอยู่ใน ปล. และผมเชื่อว่าคุณต้องทำได้ (และคุณจะเป็นโปรแกรมเมอร์ที่ดีในอนาคตครับ)

ปล. ผมไม่อยากจะทำร้ายคุณใน ทางตรงและทางอ้อม โดยที่ผมเขียน SQL Query ใช้งานได้จริงให้กับคุณครับ
(ถ้าคุณยังจำได้ จ้าง 2 แสนบาท ทำเองดีกว่า อันนี้คุณก็ต้องดูที่เจตนาของตัวอักษรนั้นฯครับ และดูให้ลึกลึกลึกของเจตนา
ประโยคเหล่านี้เป็นมิตรกับผมครับ เพราะผมเข้าใจในเจตนานั้นฯ
)


ประวัติการแก้ไข
2014-08-10 10:24:25
2014-08-10 10:25:23
2014-08-10 10:27:00
2014-08-10 10:32:38
2014-08-10 10:37:59
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 10:21:44 By : หน้าฮี
 


 

No. 11



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



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


ตอบความคิดเห็นที่ : 10 เขียนโดย : หน้าฮี เมื่อวันที่ 2014-08-10 10:21:44
รายละเอียดของการตอบ ::
ขอบคุณเรื่องแนวคิดนะครับ


ตอบความคิดเห็นที่ : 6 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-08-10 07:42:22
รายละเอียดของการตอบ ::
ขอบคุณคำสั่ง select นะครับ ข้อมูลมาเกือบครบละครับ


ตอบความคิดเห็นที่ : 3 เขียนโดย : chai19 เมื่อวันที่ 2014-08-10 03:00:30
รายละเอียดของการตอบ ::

โค้ดของพี่เข้ใช้งานง่ายมากครับ เลือกไตรมาสได้ แต่ผมเอามาแก้ไขนิดหน่อยซึ่งตอนนี้ แสดงไตรมาส ได้ และ ปี ก็สามารถเปลี่ยนได้ละครับ

Code (PHP)
<?
$sql11 =  "select * from tbbudgetyear where  BudgetyearID = ".$_POST['year']." "; 
$objQuery11 = mysql_query($sql11);
while($row11 = mysql_fetch_array($objQuery11)) 

{
	$nest = $row11['Budgetyear'];
		}
	?>
    <?
$qua=$_POST['quarter'];      //เก็บค่า 1   2   3   4
$yeareng  = $nest - 543 ;    // แปลง ปีไทย เป็น ปีฝรั่ง
$yeareng2 = $yeareng-1;    // ปีฝรั่ง - 1 เพราะไตรมาสแรก อยู่คนละปีกัน
  switch ($qua){
  case 0:
     echo"ต้องเลือกไตรมาสก่อน";
     exit();
  case 1:
     $qua=" BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31' ";   
 // ไตรมาส 1 ค่าระหว่าง '$yeareng2-10-1' AND '$yeareng2-12-31'
     break;
  case 2:
     $qua="BETWEEN '$yeareng-01-1' AND '$yeareng-03-31' ";
     break;
  case 3:
     $qua="BETWEEN '$yeareng-04-1' AND  '$yeareng-06-30' ";
     break;
  case 4:
     $qua="BETWEEN '$yeareng-07-1' AND  '$yeareng-09-30' ";
     break;
}
	 
	 echo  $qua ; "</br>";


?>


ผมเปลี่ยนเป็น BETWEEN ครับ ข้อมูลมาครบ ^^









สำหรับผู้สนใจนะครับ ผมแปะโค้ดไว้ให้นะครับ สามารถ select ไตรมาสแบบไทยได้

หน้านี้จะเป็นการออกรายงาน แบบ doc แนวนอนด้วยนะครับ

pdf รอว่างๆค่อยทำครับ ยากเกิน

หน้าเลือกเงื่อนไขครับ
Code (PHP)
<?
require ('connect.php');
session_start();
if($_SESSION['UserID'] == ""){
									header("Content-type: text/html; charset=utf-8");
 									echo"<script language='JavaScript' >";
									echo"alert('กรุณากรอกข้อมูลเพื่อเข้าสู่ระบบ');";
									echo"</script>";		
									echo "<meta http-equiv='refresh' content='0;url=index.php' />";
exit(); 
}
?>
<style type="text/css">
<!--
.style1 {
	font-family: "TH SarabunPSK";
	font-size: 18pt;
	font-weight: bold;
}
.style2 {
	font-family: "TH SarabunPSK";
	font-size: 16pt;
	font-weight: bold;
}
.style5 {cursor: hand; font-weight: normal; color: #000000;}
.style9 {font-family: Tahoma; font-size: 12px; }
.style11 {font-size: 12px}
.style13 {font-size: 9}
.style16 {font-size: 9; font-weight: bold; }
.style17 {font-size: 12px; font-weight: bold; }
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ระบบสนับสนุนการตัดสินใจ</title>
<script language="javascript">
function fncSubmit(strPage)
{
	if(strPage == "page1")
	{
		document.frmMain.action="report_clearbill.php";
	}
	
	if(strPage == "page2")
	{
		document.frmMain.action="report_totalclearbill.php";
	}	
	if(strPage == "page3")
	{
		document.frmMain.action="report_clearbill.php";
	}	
	
	document.frmMain.submit();
}
</script>
<script language = "JavaScript">
		//**** List Province (Start) ***//
		function ListProvince(SelectValue)
		{
			frmMain.ddlProvince.length = 0
			
			//*** Insert null Default Value ***//
			var myOption = new Option('','')  
			frmMain.ddlProvince.options[frmMain.ddlProvince.length]= myOption
			
			<?
			$intRows = 0;
			$strSQL = "SELECT tbbudgetcategory.BudgettypeID, tbbudgettype.Budgettype, tbbudgetcategory.BudgetyearID
			FROM tbbudgetcategory, tbbudgetyear, tbbudgettype
			WHERE tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID
			AND tbbudgetyear.BudgetyearID = tbbudgetcategory.BudgetyearID
			ORDER BY  `tbbudgetcategory`.`BudgettypeID` ASC 
		   ";
			$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
			$intRows = 0;
			while($objResult = mysql_fetch_array($objQuery))
			{
			$intRows++;
			?>			
				x = <?=$intRows;?>;
				mySubList = new Array();
				
				strGroup = <?=$objResult["BudgetyearID"];?>;
				strValue = "<?=$objResult["BudgettypeID"];?>";
				strItem = "<?=$objResult["Budgettype"];?>";
				mySubList[x,0] = strItem;
				mySubList[x,1] = strGroup;
				mySubList[x,2] = strValue;
				if (mySubList[x,1] == SelectValue){
					var myOption = new Option(mySubList[x,0], mySubList[x,2])  
					frmMain.ddlProvince.options[frmMain.ddlProvince.length]= myOption					
				}
			<?
			}
			?>																	
		}
		//**** List Province (End) ***//

</script>
</head>
<body>
<table width="869" height="380" border="1">
  <tr>
    <td align="center"><p>&nbsp;
      </p>
      <form  name="frmMain" method="post" action="pdf_clearbill.php">
        <p>
          เมนูเลือกรายงาน
        </p>
        <p></p>
        <p>
          <select id="ddlGeo" name="year"  onChange = "ListProvince(this.value)" OnChange="resutName(this.value);" >
            <option selected value="">กรุณาเลือกปีงบประมาณ</option>
             <?
           $objQuery = mysql_query("SELECT * FROM tbbudgetyear");
           while($objResult = mysql_fetch_array($objQuery)){
       		 ?>
         <option value="<? echo $objResult['BudgetyearID'] ?>"> <?  mysql_query("SET NAMES UTF8"); echo $objResult['Budgetyear'] ?></option>
        <? }?>
          </select>
        </p>
        <p>
          </select>
<select name="quarter" id="quarter">
<option value="1" <?php echo ($m<4? 'SELECTED' : '')?> >ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
<option value="2" <?php echo ($m>3 && $m<7 ? 'SELECTED' : '')?> >ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
<option value="3" <?php echo ($m>6 && $m<10 ? 'SELECTED' : '')?> >ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
<option value="4" <?php echo ($m>9? 'SELECTED' : '')?> >ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
		  </select>
        </p>
        <p>
          <select id="ddlProvince" name="type" >
            <option>ต้องเลือกปีงบประมาณก่อน</option>
          </select>
        </p>
        <p>&nbsp;</p>
        <p>
        <input name="btnButton1" type="button" value="พิมพ์รายงานประจำปี"  onClick="JavaScript:fncSubmit('page1')">
		<input name="btnButton2" type="button" value="พิมพ์รายงานรวมหมวดหมู่"  onClick="JavaScript:fncSubmit('page2')">
        <input name="btnButton3" type="button" value="พิมพ์รายงานแยกตามหมวดหมู่"  onClick="JavaScript:fncSubmit('page3')">
        </p>
      </form>
      
  </tr>
</table>
</body>
</html>



หน้าออกรายงานครับ
Code (PHP)
<?
require("connect.php");
header("Content-Type: application/msword");
header('Content-Disposition: attachment; filename="Report_bugget.doc"');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<title>My Title Here</title>
<style type="text/css">
<!--
.style1 {
	font-family: "TH SarabunPSK";
	font-size: 18pt;
	font-weight: bold;
}
.style2 {
	font-family: "TH SarabunPSK";
	font-size: 16pt;
	font-weight: bold;
}
.style3 {
	font-family: "TH SarabunPSK";
	font-size: 16pt;
	
}
.style5 {cursor: hand; font-weight: normal; color: #000000;}
.style9 {font-family: Tahoma; font-size: 12px; }
.style11 {font-size: 12px}
.style13 {font-size: 9}
.style16 {font-size: 9; font-weight: bold; }
.style17 {font-size: 12px; font-weight: bold; }
-->
</style>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">
<title>My Title Here</title>
<style>
@page Section1 {size:595.45pt 841.7pt; margin:1.0in 1.25in 1.0in 1.25in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}
div.Section1 {page:Section1;}
@page Section2 {size:841.7pt 595.45pt;mso-page-orientation:landscape;margin:1.25in 1.0in 1.25in 1.0in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}
div.Section2 {page:Section2;}
</style>
</head>
<?php
Class func{
	
		function trimas($i){
		return $i > 3 ? ( $i > 6 ? ($i > 9 ? 'T4' : 'T3') : 'T2') : 'T1';
		}
		function mothengmini($data){
		$mothcheck = 
		array("moth"=>array("01"=>"Jan","02"=>"Feb","03"=>"Mar","04"=>"Apr","05"=>"May","06"=>"Jun","07"=>"July","08"=>"Aug","09"=>"sep","10"=>"Oct","11"=>"Nov","12"=>"Dec"));
		return $mothcheck["moth"][$data];
		}

		function mothengfull($data){
		$mothcheck = 
		array("moth"=>array("01"=>"January","02"=>"Febuary","03"=>"Mar","04"=>"April","05"=>"May","06"=>"June","07"=>"July","08"=>"August","09"=>"september","10"=>"October","11"=>"November","12"=>"December"));
		return $mothcheck["moth"][$data];
		}

		function moththai($data){
		$mothcheck = 
		array("moth"=>array("01"=>"มกราคม","02"=>"กุมภาพันธุ์","03"=>"มีนาคม","04"=>"เมษายน","05"=>"พฤษภาคม","06"=>"มิถุุนายน","07"=>"กรกฎาคม","08"=>"สิงหาคม","09"=>"กันยายน","10"=>"ตุลาคม","11"=>"พฤศจิกายน","12"=>"ธันวาคม"));
		return $mothcheck["moth"][$data];
		}
		function moththaimini($data){
		$mothcheck = 
		array("moth"=>array("01"=>"ม.ค.","02"=>"ก.พ.","03"=>"มี.ค","04"=>"เม.ย","05"=>"พ.ค.","06"=>"มิ.ย.","07"=>"ก.ค.",
		"08"=>"ส.ค.","09"=>"ก.ย.","10"=>"ต.ค.","11"=>"พ.ย.","12"=>"ธ.ค."));
		return $mothcheck["moth"][$data];
		}


		function datemoth($data,$check){
		$data	= explode("-",$data);
		$day	= $data[0];
		$moth	= $data[1];
		if($check == "mini"){
		$moth2	= $this->mothengmini($moth);
		$year	= $data[2];
		}
		else if($check == "full"){
		$moth2  = $this->mothengfull($moth);
		$year	= $data[2];
		}
		else if($check == "thai"){
		$moth2  = $this->moththai($moth);
		$year	= $data[2]+543;
		}
		else if($check == "thaimini"){
		$moth2  = $this->moththaimini($moth);
		$year	= $data[2]+543;
		}
		return $day." ".$moth2." ".$year;
		}
}

	$fnc = new func();
	//echo $fnc->datemoth("27-02-2014","thai")."<br>";
	//echo $fnc->datemoth("27-02-2014","mini")."<br>";
	//echo $fnc->datemoth("27-02-2014","full")."<br>";
	//echo $fnc->datemoth("27-02-2014","thaimini")."<br>";
?>

</head>
<body>
<div class=Section2>
<table width="704" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
 
   <?php //ดึงข้อมูล ปี และ ไตรมาส จากค่า POST
$yearid = " SELECT * 
FROM tbbudgetyear where 
tbbudgetyear.BudgetyearID= ".$_POST['year']."";
$result=mysql_query($yearid);
while ($r=mysql_fetch_array($result)) 
{	
		$year =$r['Budgetyear'];
 
}	 

?>
    <td width="291" align="center">รายงานการใช้งบประมาณแผ่นดิน ประจำปีงบประมาณ <?=$year; ?></td>
 

  </tr>
  <tr>
    <td align="center"><span class="style1">มทร.ล้านนา ภาคพายัพ (จอมทอง)
      
    </span></td>
  </tr>
  <tr>
    <td align="center">มหาวิทยาลัยเทคโนโลยีราชมงคลล้านนา ภาคพายัพ เชียงใหม่</td>
  </tr>
 <? 
  $type = $_POST['type'];
$strSQL01 = "SELECT Budgettype
FROM  tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID
AND tbbudgetcategory.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbbudgetcategory.BudgettypeID = ".$type."
";
 $result01 = mysql_query($strSQL01);
while ($row_show01=mysql_fetch_array($result01)) 
{  
?>
  <tr>
  
    <td height="43" align="center"><p>
      <?=$row_show01['Budgettype']; ?>
    </p></td>
  </tr>
 <?
 }?>


</table>
<table width="1268" height="262" border="1"  align="center">
  <tr align="center">
    <td width="47" rowspan="2">ลำดับ</td>
    <td width="100" rowspan="2">ว.ด.ป</td>
    <td width="104" rowspan="2">เลขที่เอกสาร</td>
    <td width="102" rowspan="2">รายการ</td>
    <td width="126" rowspan="2">งบที่ได้รับจัดสรร</td>
    <td colspan="2">งบดำเนินงาน</td>
    <td width="82" rowspan="2">ยอดคงเหลือ</td>
    <td width="212" rowspan="2">ผู้รับผิดชอบคณะ/หน่วยงาน</td>
    <td width="83" rowspan="2">หมายเหตุ</td>
  </tr>
  <tr>
    <td width="81" align="center">ได้รับอนุมัติ</td>
    <td width="100" align="center">จ่ายจริง</td>
  </tr>
  <tr>
  
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td align="center">ยอดยกมา</td>
    <? 
// ทำการดึงข้อมูล รายงานต่างๆ
$strSQL3 =  "SELECT *
FROM tbbudgetcategory
WHERE BudgetyearID = ".$_POST['year']." 
AND BudgettypeID = ".$_POST['type']."
";
  $result3=mysql_query($strSQL3);
while ($row_show2=mysql_fetch_array($result3)) 
{	
			$rowbudget=$row_show2['Budgetcategoryamount'];
		$rowbudget01=number_format("$rowbudget",2);
	
?>			

    <td align="right"><?=$rowbudget01;?></td>

<?php
 }
?>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>

  </tr>
<?
$sql11 =  "select * from tbbudgetyear where  BudgetyearID = ".$_POST['year']." "; 
$objQuery11 = mysql_query($sql11);
while($row11 = mysql_fetch_array($objQuery11)) 

{
	$nest = $row11['Budgetyear'];
		}
	?>
    <?
$qua=$_POST['quarter'];
$yeareng  = $nest - 543 ; 
$yeareng2 = $yeareng-1;
  switch ($qua){
  case 0:
     echo"ต้องเลือกไตรมาสก่อน";
     exit();
  case 1:
     $qua=" BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31' ";
     break;
  case 2:
     $qua="BETWEEN '$yeareng-01-1' AND '$yeareng-03-31' ";
     break;
  case 3:
     $qua="BETWEEN '$yeareng-04-1' AND  '$yeareng-06-30' ";
     break;
  case 4:
     $qua="BETWEEN '$yeareng-07-1' AND  '$yeareng-09-30' ";
     break;
}
// ทำการดึงข้อมูล รายงานต่างๆ
$type = $_POST['type'];
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate ".$qua."
";
  $result=mysql_query($strSQL);
while ($row_show=mysql_fetch_array($result)) 
{ 
	$dmy = date("d-m-Y", strtotime($row_show['Clearbilldate']) );
	$ae =  $fnc->datemoth("$dmy","thaimini");   // แปลง $row_show['Clearbilldate'] เป็น วันเดือนปีไทย
	 $rang = 1 ;
	
	?>
  <tr>
    <td align="center"><?=$rang++; ?></td>
    <td align="center"><?=$ae; ?></td>
    <td align="center"><?=$row_show['Clearbillnumber']; ?></td>
    <td align="left"><span class="style1">
      <?=$row_show['Clearbillname']; ?>
    </span></td>
    <td>&nbsp;</td>
    
    <? 
		$to	=	$row_show['Clearbillpay'] - $row_show['Clearbillpayer'];
     
	?>
    <td align="right"><?=number_format($row_show['Clearbillpay'],2); ?></td>
    <td align="right"><?=number_format($row_show['Clearbillpayer'],2); ?></td>
    <td align="right"><?=number_format($to,2); ?></td>
    <td align="center"><?=$row_show['Clearbillchage']; ?></td>
    <td align="center"><?=$row_show['Clearbillnote']; ?></td>
    
  </tr>
  <?php } ?>
  
 <? $type = $_POST['type'];
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate ".$qua."
";
  $result=mysql_query($strSQL);
	while ($row_show= mysql_fetch_assoc ($result)) 
			{ 

 				$total += $row_show['Clearbillpay'] ;
				$total1 += $row_show['Clearbillpayer'] ;
			}

?>
  <tr>
    <td colspan="5">รวม</td>
    <td align="right"><?=$total;?></td>
    <td align="right"><?=$total1;?></td>
 <?
  $strSQL4 =  "SELECT *
FROM tbbudgetcategory
WHERE BudgetyearID = ".$_POST['year']." 
AND BudgettypeID = ".$_POST['type']."
";
  $result4=mysql_query($strSQL4);
while ($row_show4=mysql_fetch_array($result4)) 
{
	
	$de = $row_show4['Budgetcategoryamount'] - $total1;

}
?>
  
  
  	<td align="right"><?=number_format($de,2);?>&nbsp;</td>

    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  
  

  
</table>
</div>
</body>
</html>



ประวัติการแก้ไข
2014-08-10 11:57:15
2014-08-10 13:43:08
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-10 11:56:51 By : nest12345
 


 

No. 12



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



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


x1. จากกระทู้ที่ https://www.thaicreate.com/php/forum/110541.html (คุณมีคำตอบแล้ว)
x2. และกระทู้นี้ (คุณมีคำตอบแล้ว)


จงเป็นผู้ให้ที่ดี และจงเป็นผู้รับที่ดี (สิ่งนี้คุณทำได้แล้วครับ จาก x1. และ x2. )


ผมมั่นใจว่าคุณจะเป็นโปรแกรมเมอร์ที่ดีได้ในอนาคตครับ
ในวันข้างหน้าถึงแม้ว่าคุณจะเติบโตแล้ว แต่
และโปรดอย่าลืมมันไปจากหัวใจ (ลูกชายของผม/หลานชายของผม) และจงหวลระลึกถึงมันเสมอ สิ่งที่ผมบ่นให้คุณฟังที่ #NO 9



ปล. ผมจะกลับมา บ่น Update กระทู้นี้อีกครั้งหนึ่ง อาจจะเป็น 1 วัน หรือ 1 เดือน หรือ 1 ปีในวันข้างหน้า ตามสัญญาครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-11 19:48:51 By : หน้าฮี
 


 

No. 13



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



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


ตอบความคิดเห็นที่ : 12 เขียนโดย : หน้าฮี เมื่อวันที่ 2014-08-11 19:48:51
รายละเอียดของการตอบ ::
ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-11 20:15:57 By : nest12345
 


 

No. 14



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



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


ตอบความคิดเห็นที่ : 13 เขียนโดย : nest12345 เมื่อวันที่ 2014-08-11 20:15:57
รายละเอียดของการตอบ ::
คุณลองตามไปดูนะครับ
https://www.thaicreate.com/dotnet/forum/110543.html#2



ผมฝัง Jquery/JavaScript ลงไปใน DLL
(Dynamic LInking Library 32/64 bits)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-11 21:38:14 By : หน้าฮี
 


 

No. 15



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



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


มาตามสัญญาครับ โดยใช้ MySQL Workbench ในการทดสอบ (เหตุผลเดียวที่ใช้ MySQL Workbench คือของฟรี)
จากเดิมที่เคยอ้างอิงเอาไว้ดังนี้
Code (SQL)
-- SELECT (QUARTER('2013-10-01') % 4) + 1 AS Quarter -- ผลลัพธ์เท่ากับ Q1
-- SELECT (QUARTER('2014-09-30') % 4) + 1 AS Quarter -- ผลลัพธ์เท่ากับ Q4



หวังว่าคงเข้าใจตรงกัน ปีงบประมาณปัจจุบัน เท่ากับ 1Q ของปีที่ผ่านมา + 3Q ของปีปัจจุบัน (พ.ศ. 2557 = 2014)
Code (SQL)
SELECT 
    *
FROM
    (SELECT 
        DATE_ADD(sd_date, INTERVAL (Quarter - 1) * 3 MONTH) AS StartDate,
		DATE_ADD(DATE_ADD(sd_date, INTERVAL Quarter * 3 MONTH), INTERVAL - 1 DAY) AS EndDate,
		Quarter
    FROM
        (SELECT DATE_ADD('2014-10-01', INTERVAL - 1 YEAR) AS sd_date) AS sd -- ย้อนหลัง 1 ปี (หา Q1 นั่นแหละครับ)
    CROSS JOIN (SELECT 1 AS Quarter UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS Q) AS ThaiBudgetTable


ผลลัพธ์ในเบื้องต้น
qt_01


และจะมาบ่นให้ฟังต่อถ้ามีโอกาสครับ
...

ปล. ฟังก์ชั่น SUM() ของฐานข้อมูล MSSQL Server > 2008R2 ประสิทธิภาพสูงกว่า MySQL มาก (คนละชั้นเลยครับ)
ไวยกรณ์
Code (SQL)
SELECT SUM(คอลัมภ์ที่ต้องการ) OVER (PARTITION BY คอลัมภ์ที่ต้องการ ORDER BY คอลัมภ์sที่ต้องการ) AS ColA,
SUM(คอลัมภ์ที่ต้องการ) OVER (PARTITION BY คอลัมภ์ที่ต้องการ ORDER BY คอลัมภ์sที่ต้องการ) AS ColB
FROM Tableที่ต้องการ
-- GROUP BY อิสระเสรีในตัวของมันเองครับ (PARTITION == GROUP BY นั่นแหละครับ (แจ๋วจริงฯ)


***** MSSQL Server 2008R2 SUM() OVER (PARTITION ได้แต่ ORDER BY ไม่ได้ครับ) *****
ข้อมูลอ้างอิง : http://msdn.microsoft.com/en-us/library/ms189461%28v=sql.120%29.aspx


ประวัติการแก้ไข
2014-08-13 20:18:00
2014-08-13 23:00:06
2014-08-13 23:04:27
2014-08-13 23:06:29
2014-08-13 23:34:27
2014-08-14 00:23:22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-13 20:14:55 By : หน้าฮี
 


 

No. 16



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



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


ต่อจาก #NO 15
Code (SQL)
SELECT 
   ((123456789) - (Q1 + Q2 + Q3 + Q4)) AS Balance, Q1, Q2, Q3, Q4
FROM
    (SELECT 
        SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1,
        SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 2, b.Clearbillpay , 0)) AS Q2,
        SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 3, b.Clearbillpay , 0)) AS Q3,
        SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 4, b.Clearbillpay , 0)) AS Q4,
        b.BudgettypeID
    FROM
        (SELECT 
        DATE_ADD(sd_date, INTERVAL (Quarter - 1) * 3 MONTH) AS StartDate,
            DATE_ADD(DATE_ADD(sd_date, INTERVAL Quarter * 3 MONTH), INTERVAL - 1 DAY) AS EndDate,
            Quarter
    FROM
        (SELECT DATE_ADD('2014-10-01', INTERVAL - 1 YEAR) AS sd_date) AS sd
    CROSS JOIN (SELECT 1 AS Quarter UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS Q) AS ThaiBudgetTable
    INNER JOIN tbclearbill AS b ON b.Clearbilldate BETWEEN StartDate AND EndDate
    GROUP BY b.BudgettypeID
    ORDER BY b.BudgettypeID, b.Clearbilldate) AS SemiFinal
    -- RIGHT JOIN tbbudgetcategory AS c ON  c.BudgettypeID = SemiFinal.BudgettypeID



ประวัติการแก้ไข
2014-08-14 00:13:33
2014-08-14 07:18:30
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-14 00:08:27 By : หน้าฮี
 


 

No. 17



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



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


ต่อจาก #NO 15 อาจเป็นไปได้ว่าวันที่เริ่มต้นงบประมาณอาจจะไม่ใช่วันที่ xxxx-10-01
สมมุติว่าเป็น วันที่ 2014-10-30 เป็นต้น (ปี-เดือน-วัน)

หลักการ "มันเลื่อนไปกี่วัน"
Code (SQL)
SUM(If((QUARTER(b.Clearbilldate + 29 ) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1
หรือ
SUM(If((QUARTER(DATE_ADD(b.Clearbilldate, INTERVAL 29 DAY)) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1


Code (SQL)
SELECT 
   c.BudgetAmount, ((123456789) - (Q1 + Q2 + Q3 + Q4)) AS Balance, Q1, Q2, Q3, Q4
FROM
    (SELECT 
        SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1,
        SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 2, b.Clearbillpay , 0)) AS Q2,
        SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 3, b.Clearbillpay , 0)) AS Q3,
        SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 4, b.Clearbillpay , 0)) AS Q4,
        b.BudgettypeID
    FROM
        (SELECT 
        DATE_ADD(sd_date, INTERVAL (Quarter - 1) * 3 MONTH) AS StartDate,
            DATE_ADD(DATE_ADD(sd_date, INTERVAL Quarter * 3 MONTH), INTERVAL - 1 DAY) AS EndDate,
            Quarter
    FROM
        (SELECT DATE_ADD('2014-10-30', INTERVAL - 1 YEAR) AS sd_date) AS sd
    CROSS JOIN (SELECT 1 AS Quarter UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS Q) AS ThaiBudgetTable
    INNER JOIN tbclearbill AS b ON b.Clearbilldate BETWEEN StartDate AND EndDate
    GROUP BY b.BudgettypeID
    ORDER BY b.BudgettypeID, b.Clearbilldate) AS SemiFinal
    RIGHT JOIN tbbudgetcategory AS c ON  c.BudgettypeID = SemiFinal.BudgettypeID



ปล. 1. ตรรกะยังเหมือนเดิมแต่สังเกตุว่า "วิธีคิดก็ไม่เปลี่ยนไป"
--- 2. ถ้าวันที่เริ่มต้นงบประมาณ ไม่ใช่ วันที่ xxxx-01-01 (สากล) มันจะคร่อมคาบเกี่ยวปีเสมอ


ประวัติการแก้ไข
2014-08-14 07:31:59
2014-08-14 07:36:02
2014-08-14 07:40:48
2014-08-14 07:45:13
2014-08-14 07:48:12
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-14 07:27:44 By : หน้าฮี
 


 

No. 18



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



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


ต่อจาก #NO 17

คำว่า "มันจะคร่อมคาบเกี่ยวปีเสมอ" มันก็มีประเด็นสงสัยตามมาอีกว่า คร่อมปีแบบไหน เช่น
ปีก่อนหน้า-ปีปัจจุบัน หรือว่า
ปีปัจจุบัน-ปีหน้า

...


ตรรกะเหมือนเดิม แต่วิธีคิดเปลี่ยนไป?
หลักการ "เดินหน้าสองก้าว หรือว่า ถอยหลังสองก้าว" จะได้ระยะทางเท่ากันเสมอนั่นคือ 2 ก้าว
...


ประวัติการแก้ไข
2014-08-14 08:01:08
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-14 07:58:39 By : หน้าฮี
 


 

No. 19



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



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


ข้อสงสัยประดับปัญญา "หนึ่งปีมี 12 เดือน" เพราะฉะนั้น
12 / 4 = ไตรมาส
12/ 6 = ครึ่งปี
12/2 = ?

หรือแต่ละช่วงเวลา มีจำนวนวันไม่แน่นอน
แล้วเราจะเขียน SQL Query ได้อย่างไร?
...

หลักการ "ทำตารางช่วงวันตามที่ต้องการ StartDate, EndDate, Issued"



ปล. หมอดูหมอเดายังทำนายทายทัก ชะตาชีวิต ของมนุษย์ได้แล้วนับประสาอะไรกับการเขียนโปรแกรม


ประวัติการแก้ไข
2014-08-14 08:15:01
2014-08-14 08:17:39
2014-08-14 08:19:04
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-14 08:12:07 By : หน้าฮี
 


 

No. 20



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



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




โค้ดเป๊ะมากครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-08-14 09:23:05 By : nest12345
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามเรื่องการ select ไตรมาสหน่อยครับ ตอนนี้เริ่มเข้าใจนิดหนึ่งแล้วครับ (ตอนนี้รันผ่านไร้ปัญหาละครับ ^_^ สนใจดูแนวคิดการเลือกไตรมาสแบบไทยเชิญด้านในครับ)
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 00
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 อัตราราคา คลิกที่นี่