 |
สอบถาม PHP + SQL บวกจำนวนสินค้าที่ ID ซ้ำกัน แยกตามเดือน |
|
 |
|
|
 |
 |
|
ให้ใช้ group by ไม่ใช้ distinct
Code (SQL)
select id
, sum( if( right(left(date, 7),2) = '01', amt, 0)) m1
, sum( if( right(left(date, 7),2) = '02', amt, 0)) m2
, sum( if( right(left(date, 7),2) = '03', amt, 0)) m3
...
, sum( if( right(left(date, 7),2) = '12', amt, 0)) m12
from tablename
where left(date,4)='2023'
group by id
|
ประวัติการแก้ไข 2023-01-30 11:55:51
 |
 |
 |
 |
Date :
2023-01-30 11:51:43 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-01-30 11:51:43
รายละเอียดของการตอบ ::
... ผมใช้แบบนี้ถูกมั้ยครับพี่ ผมไม่เคยใช้ 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";
|
 |
 |
 |
 |
Date :
2023-01-30 12:47:45 |
By :
kko |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
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,
ปรับโค๊ดไปตามสภาพแวดล้อม
|
 |
 |
 |
 |
Date :
2023-01-30 19:08:12 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แนะนำ ให้เขียนเป็น 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
|
 |
 |
 |
 |
Date :
2023-01-30 19:16:51 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เวลาใช้
Code (SQL)
select s.*, b.xx, c.yy
from SaleAmount( 2023 ) s
left join table_b b on b.ID = s.ID
left join table_c b on c.ID = s.ID
|
ประวัติการแก้ไข 2023-01-30 19:20:35
 |
 |
 |
 |
Date :
2023-01-30 19:19:44 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากๆครับพี่ เดี๋ยวผมลองปรับใช้ดูครับ
|
 |
 |
 |
 |
Date :
2023-01-30 21:16:45 |
By :
kko |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|