Mysql เปรียบเทียบค่า2ตาราง มาก-น้อยต่างกัน ช่วยแนะนำหน่อยครับ
ผมต้องการเปรียบเทียบค่า 2ตาราง เพื่อแสดงผลลัพธ์ของสินค้าว่าน้อยกว่าค่าที่ตั้งไว้หรือไม่
ตาราง A เก็บค่าคงที่ปริมาณสินค้าต่ำสุด
ตาราง B เก็บข้อมูลซื้อเข้า-ขายออก
เมื่อคำนวณสินค้าจากการซื้อ-ขายตาราง B มีค่าน้อยกว่าตาราง A ที่ตั้งไว้ ให้โชว์ชื่อสินค้าตาราง B (ที่น้อยกว่า)ออกมา
Private Sub Bind_dgv_small()
conn.Open()
Dim strSQL As String = "select (product.id_code) as id,(product.code) as code,(product.name_) as name_,(product_cat.cat_name) as cat_name,(product.sell) as sell " + _
",CONCAT(sum(product_in_out.num - product_in_out.num_sell)),' ',product_pack.pack_name as sum_stock ,if(product.status = '1','สมบูรณ์','ระงับ') as status " + _
"from product,product_in_out,product_cat,product_pack where (product.id_code = product_in_out.id_code) and (product.id_cat = product_cat.id) and (product.id_pack = product_pack.id) and (product_in_out.status = '1') and (product.low >= sum_stock) group by product_in_out.id_code order by product.name_"
strSQL_print = strSQL
Dim Cmd As New MySqlCommand(strSQL, conn)
Dim adaptre As New MySqlDataAdapter(Cmd)
Dim data As New DataSet()
adaptre.Fill(data, "data_all")
lbl_reccord.Text = data.Tables("data_all").Rows.Count()
dgv.DataSource = data.Tables("data_all")
dgv.Columns.Clear()
Dim column As DataGridViewTextBoxColumn
column = New DataGridViewTextBoxColumn()
column.DataPropertyName = "id"
column.HeaderText = ""
column.Width = 0
dgv.Columns.Add(column)
dgv.Columns(0).Visible = False 'ซ่อน column
column = New DataGridViewTextBoxColumn()
column.DataPropertyName = "code"
column.HeaderText = "รหัส"
column.Width = 130
dgv.Columns.Add(column)
column = New DataGridViewTextBoxColumn()
column.DataPropertyName = "name_"
column.HeaderText = "ชื่อสินค้า"
column.Width = 150
dgv.Columns.Add(column)
column = New DataGridViewTextBoxColumn()
column.DataPropertyName = "cat_name"
column.HeaderText = "ประเภทสินค้า"
column.Width = 120
dgv.Columns.Add(column)
column = New DataGridViewTextBoxColumn()
column.DataPropertyName = "sell"
column.HeaderText = "ราคาขาย"
column.Width = 90
dgv.Columns.Add(column)
column = New DataGridViewTextBoxColumn()
column.DataPropertyName = "sum_stock"
column.HeaderText = "จำนวนสต๊อก"
column.Width = 110
dgv.Columns.Add(column)
column = New DataGridViewTextBoxColumn()
column.DataPropertyName = "status"
column.HeaderText = "สถานะ"
column.Width = 80
dgv.Columns.Add(column)
conn.Close()
If lbl_reccord.Text = "0" Then
btn_print.Enabled = False
Else
btn_print.Enabled = True
End If
End Sub
จุดผิดก่อน ไม่เออเร่อร์แต่ไม่ถูกเพราะวงเล็บครอบผิดที่
CONCAT(sum(product_in_out.num - product_in_out.num_sell)),' ',product_pack.pack_name as sum_stock
ควรจะเป็น
CONCAT(sum(product_in_out.num - product_in_out.num_sell),' ',product_pack.pack_name) as sum_stock
หรือ
CONCAT(sum(product_in_out.num - product_in_out.num_sell)) as sum_stock,' ',product_pack.pack_name
และจากที่คุณใช้ sum() คุณจะใส่ condition เกี่ยวกับ sum ลงใน where clause ไม่ได้
คุณต้องใส่หลังจาก group by ด้วยคำสั่ง having product.low>=sum_stock
และ sum_stock ของคุณก็เป็น string นำมาเปรียบเทียบกัน ก็คงไม่ได้อีก ไม่เออเร่อร์ แต่เพี้ยนแน่นอน
ควรใช้ subquery เข้ามาช่วย
select (product.id_code) as id,(product.code) as code,(product.name_) as name_,(product_cat.cat_name) as cat_name,(product.sell) as sell ,
CONCAT( (inout.stkIN - inout.stkOUT),' ', product_pack.pack_name as sum_stock ,
if(product.status = '1','สมบูรณ์','ระงับ') as status
from product,
product_cat,product_pack ,
(select id_code, sum(num) as stkIN, sum(num_sell) as stkOUT
from product_in_out where status=1
group by id_code) as inout
where (product.id_code = inout.id_code)
and (product.id_cat = product_cat.id)
and (product.id_pack = product_pack.id)
and (product.low >= (inout.stkIN-inouit.stkOUT))
order by product.name