 |
|
รบกวนผู้ที่ชำนาญ SQL ช่วยผมเรื่องนี้หน่อยครับติดมาหลายวันแล้ว |
|
 |
|
|
 |
 |
|
ทำ View ของ TB2 ดึง field QTY กับ MODEL จาก TB1, กับ TB4 มาก่อนครับ
|
 |
 |
 |
 |
Date :
2019-01-13 20:56:49 |
By :
Aod47 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มันต้องใช้ MAX อะครับ โดยที่ BC_ID ต้องดึงเฉพาะค่า MAX(ST_ID) แล้วเอามาเทียบกับ STATE อะครับ เช่น bc_id = 1 ค่า MAX คือ 2 เท่ากับ BC_ID = 1 มี MD_ID = 1 เลยทำให้ผลลัพออกมาเป็น MODEL = 140 : STATE2 = 20 อะครับแต่ไม่รู้จะเขียนโค๊ดออกมาแบบไหน
|
 |
 |
 |
 |
Date :
2019-01-15 11:01:38 |
By :
realizejoke |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
นี่คือสิ่งที่ผมหมายถึง

|
 |
 |
 |
 |
Date :
2019-01-15 15:29:52 |
By :
PhrayaDev |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
select * from crosstab(
select m.model, s.st_name, MAX_QTY from
(
select tb1.md_id, tb2.st_id, MAX( qty ) MAX_QTY
from tb1
left join tb2 on tb1.bc_id = tb2.bc_id
group by tb1.md_id, tb2.st_id
) as t
left join tb3 on t.st_id = tb3.st_id
left join tb4 on t.md_id = tb4.md_id
) as ttl( model TEXT, STATE1 NUMERIC, STATE2 NUMERIC, STATE3 NUMERIC, STATE4 NUMERIC, STATE5 NUMERIC)
ยังไงก็ตรวจสอบจาก การรันดูก่อนนะครับ เพราะไม่ได้ทดสอบ ไม่มี postgresql
และหา document อ่านซะด้วยนะครับ จะได้รู้ที่มาที่ไป
ข้อมูลสำคัญคือ ตาราง 1 กับ 2
ตาราง 3 - 4 เป็น label
นำ 1 - 2 join กันให้ได้ข้อมูล สำคัญก่อน
แล้ว ค่อยนำไปจอยกับ label อีกครั้ง
เขียนแยกส่วนให้ชัดเจนอีกหน่อย ก็คล่อง ค่อยรวมเขียนสั้นๆ ได้
|
ประวัติการแก้ไข 2019-01-16 01:15:18
 |
 |
 |
 |
Date :
2019-01-16 01:13:51 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มันเป็นชุดคำสั่งของ crosstab ครับ เป็นการกำหนดการแสดงผล ลองหาคู่มือ ของ postgre อ่านดูครับ
คล้ายคำสั่ง pivot ของ mssql ผมไม่ได้ลง postgre ไว้เลยไม่สามารถทดสอบได้ครับ
|
 |
 |
 |
 |
Date :
2019-01-25 16:00:31 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|