สอบถามการใช้ PHP + SQL บวกจำนวนสินค้าที่ซื้อแยกตามเดือนครับ ตอนนี้ผม SELECT แยกออกมาเป็นรายการได้แล้ว ติดปัญหาที่ id ซ้ำกันมันไม่รวมกันให้ อยากทราบว่าถ้าผมจะให้มัน SUM ออกมาตามเดือนต้องเขียนยังไงต่อครับ โดยให้เรียงเดือน 1 - 12 Code (PHP)
$stmt = $conn->query("SELECT DISTINCT SODT.GoodID, SODT.GoodName, SODT.GoodPrice2, SODT.GoodQty2 FROM SODT LEFT JOIN SOHD ON SOHD.SOID=SODT.SOID
LEFT JOIN EMGood ON EMGood.GoodID=SODT.GoodID
LEFT JOIN EMCust ON EMCust.CustID=SOHD.CustID WHERE EmpID = '$empid' AND CustCode LIKE '%$txtKeyword%'
AND YEAR(SOHD.DocuDate) = '$year'");
$stmt->execute();
... ผมใช้แบบนี้ถูกมั้ยครับพี่ ผมไม่เคยใช้ sum if เลยครับ....... Code (PHP)
$sql = "SELECT SODT.GoodID,
sum(if(right(SOHD.DocuDate(date, 7),2) = '01', SODT.GoodQty2, 0)) m1,
sum(if(right(SOHD.DocuDate(date, 7),2) = '02', SODT.GoodQty2, 0)) m2
FROM SODT LEFT JOIN SOHD ON SOHD.SOID=SODT.SOID
LEFT JOIN EMGood ON EMGood.GoodID=SODT.GoodID
LEFT JOIN EMCust ON EMCust.CustID=SOHD.CustIDWHERE
WHERE EmpID = '$empid' AND CustCode LIKE '%$txtKeyword%' AND YEAR(SOHD.DocuDate)='$year'
GROUP BY SODT.GoodID";
$sql = "SELECT SODT.GoodID, SODT.GoodName, EMGood.GoodCode, SODT.GoodPrice2,
SUM(IF(MONTH(SOHD.DocuDate) = '01' AND YEAR(SOHD.DocuDate) = '$year', SODT.GoodQty2, 0)) as m1
FROM SODT LEFT JOIN SOHD ON SOHD.SOID=SODT.SOID
LEFT JOIN EMGood ON EMGood.GoodID=SODT.GoodID
LEFT JOIN EMCust ON EMCust.CustID=SOHD.CustID
WHERE EmpID = '$empid' AND CustCode LIKE '%$txtKeyword%'
GROUP BY SODT.GoodID, SODT.GoodName, EMGood.GoodCode, SODT.GoodPrice2";
5555555 sql server มันใช้ if ไม่ได้ ก็ไม่ tag มาด้วยว่าอะไร
ในกรณี dte มี type เป็น datetime
sum ( case when month(dte)=1 then amt else 0 end) as m1,
sum ( case when month(dte)=2 then amt else 0 end) as m2,
ในกรณี dte มี type เป็น varchar หรือ char รูปแบบ yyyy-mm-dd
sum ( case when right(left(dte,7),2)='01' then amt else 0 end) as m1,
sum ( case when right(left(dte,7),2)='02' then amt else 0 end) as m2,
ปรับโค๊ดไปตามสภาพแวดล้อม
แนะนำ ให้เขียนเป็น function เอาไว้ ใน database เลย
Code (SQL)
CREATE FUNCTION SaleAmount( @year int)
RETURNS TABLE
AS
RETURN
SELECT FIELD_ID
, SUM( CASE WHEN MONTH(FIELD_DATETIME)=1 then FIELD_AMT else 0 end) as m1
, SUM( CASE WHEN MONTH(FIELD_DATETIME)=2 then FIELD_AMT else 0 end) as m2
...
, SUM( CASE WHEN MONTH(FIELD_DATETIME)=12 then FIELD_AMT else 0 end) as m12
FROM table_name where year(FIELD_DATETIME)=@year
group by FIELD_ID