 |
|
[vb.net window app] Select ข้อมูลการเบิกใช้อุปกรณ์ออกจาก DB Access รายการเดียวกันหลายๆ Row จะ Select รวมกันออกมาเปน 1 rowได้ไหม |
|
 |
|
|
 |
 |
|
ปุ่ม search
Private Sub BNSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BNSearch.Click
Try
Dim sql_search As String
Dim search As String
Dim search2 As String
search = CBContractor.Text
search2 = TXTItem.Text
Dim num As Integer
If search = "ALL " Then
If search2 = "" Then
num = 1
Else
num = 2
End If
Else
If search = "" Then
If search2 = "" Then
num = 0
Else
num = 1
End If
Else
If search2 = "" Then
num = 2
Else
num = 3
End If
End If
End If
sql_search = " SELECT IT_PlannedList.PlannedListID, IT_Description.Item_Desc AS Item, IT_PlannedList.Remark, Contractor.Contractor_Name AS CT, IT_PlannedList.OrderedTimes, IT_PlannedList.Qty, IT_TransContractor.ReceivedQty AS [Rec Qty], IT_PlannedList.Qty - IT_TransContractor.ReceivedQty AS [Awaiting Qty], IT_PlannedList.Unit FROM (((Contractor INNER JOIN IT_PlannedList ON Contractor.Contractor_ID = IT_PlannedList.ContractorID) INNER JOIN IT_TransContractor ON IT_PlannedList.ItemNo = IT_TransContractor.ItemNo AND IT_PlannedList.ContractorID = IT_TransContractor.ContractorID AND IT_PlannedList.OrderedTimes = IT_TransContractor.OrderedTimes) INNER JOIN IT_Description ON IT_TransContractor.ItemNo = IT_Description.ItemNo) "
Dim sqlWhere As String = ""
Select Case num
Case 0 : sqlWhere = ""
Case 1 : sqlWhere = "where Item_Desc LIKE'" & search2 & "'"
Case 2 : sqlWhere = "where Contractor_Name LIKE '" & search & "'"
Case 3 : sqlWhere = "where Contractor_Name LIKE '" & search & "' and Item_Desc LIKE'" & search2 & "'"
End Select
Dim sqlemp As String
sqlemp = sql_search & sqlWhere
' MessageBox.Show(num)
da = New OleDbDataAdapter(sqlemp, conn)
da.Fill(ds, "Contractor")
If ds.Tables("Contractor").Rows.Count <> 0 Then
With DataGridView1
.ReadOnly = True
.DataSource = ds.Tables("Contractor")
End With
Else
End If
'------------------------------- ตาราง -----------------------------------
'Dim cs As New DataGridViewCellStyle()
'cs.Font = New Font("Ms Sans Serif", 10, FontStyle.Bold)
With DataGridView1
' .ColumnHeadersDefaultCellStyle = cs 'กำหนดข้อความแต่ละคอลัมน์
.Columns(0).HeaderText = "PlannedListId"
.Columns(1).HeaderText = "Item"
.Columns(2).HeaderText = "Remark"
.Columns(3).HeaderText = "CT"
.Columns(4).HeaderText = "Ordertimes"
.Columns(5).HeaderText = "Qty"
.Columns(6).HeaderText = "Rec Qty"
.Columns(7).HeaderText = "Awaiting Qty"
.Columns(8).HeaderText = "Unit"
.Columns(0).Width = 100 'กำหนดความกว้าง
.Columns(1).Width = 210
.Columns(2).Width = 210
.Columns(2).Width = 210
.Columns(3).Width = 75
.Columns(4).Width = 75
.Columns(5).Width = 50
.Columns(6).Width = 50
.Columns(7).Width = 50
.Columns(8).Width = 50
End With
'------------------------------- ตาราง -----------------------------------
Catch ex As Exception
MessageBox.Show("ไม่พบข้อมูล", "Error !!", MessageBoxButtons.OK, MessageBoxIcon.Information)
'MessageBox.Show(ex.Message)
End Try
End Sub
รูปข้อมูลในDB

รูปที่หน้าโปรแกรม

ต้องการให้มันออกมาเปน
plannedlistID ITEM Remark CT Ordertimes QTY Rec Qty Awaiting Qty unit
56 microsoft office C2 (CK) 1 43 43 0 unit
....
....
....
Tag : Ms Access, Win (Windows App), VB.NET, VS 2010 (.NET 4.x), Windows
|
|
 |
 |
 |
 |
Date :
2013-10-16 14:50:35 |
By :
ปวีณวัช |
View :
1610 |
Reply :
19 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แก้ไข ข้างนิดหน่อย พอดีเว้นข้างว่างไว้แล้วพอโพสมานดันติดกันหมด
ต้องการให้มันออกมาเปน อ่ะครับ

|
 |
 |
 |
 |
Date :
2013-10-17 08:04:06 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
select sum(recievedqty) from ... group by planedlistid
ได้ไหมหว่า
|
 |
 |
 |
 |
Date :
2013-10-17 08:21:10 |
By :
anotherdie |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ได้ครับ ต้องใช้ Group เอา
คำสั่งประมาณว่า
select plannedlistID ,ITEM, Remark, CT, Ordertimes ,QTY, SUM(Rec Qty) as Rec_Qty ,QTY-SUM(Rec Qty) as Awaiting_Qty,unit from ชื่อตาราง
group by plannedlistID ,ITEM, Remark, CT, Ordertimes ,QTY,unit
ผมมั่วเอาน่ะครับ ไปลองดูก่อน
|
 |
 |
 |
 |
Date :
2013-10-17 08:26:07 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใส่ SUM มานขึ้น error แบบนี้อ่ะครับ

|
 |
 |
 |
 |
Date :
2013-10-17 08:35:47 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
join ใส่ IT_PlannedList.PlannedListID
ประมานนี้ด้วยหรือป่าว
|
 |
 |
 |
 |
Date :
2013-10-17 08:37:56 |
By :
anotherdie |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มันบอกว่า plannedlistID ไม่ได้อยู่ใน Group by ครับ
|
 |
 |
 |
 |
Date :
2013-10-17 08:39:12 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อันนี้ผมลอง Group by ตามที่คุณFONFIREบอก
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.DataRow
Public Class Plan_List_Dialog
Dim conn As New OleDbConnection
Dim da As New OleDbDataAdapter
Dim ds As New DataSet
'Dim dvm As DataViewManager
Public sendVar As Integer
Dim dt As DataTable
Dim dr As DataRow
Private Sub BNSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BNSearch.Click
' Try
Dim sql_search As String
Dim search As String
Dim search2 As String
search = CBContractor.Text
search2 = TXTItem.Text
Dim num As Integer
If search = "ALL " Then
If search2 = "" Then
num = 1
Else
num = 2
End If
Else
If search = "" Then
If search2 = "" Then
num = 0
Else
num = 1
End If
Else
If search2 = "" Then
num = 2
Else
num = 3
End If
End If
End If
sql_search = " SELECT IT_PlannedList.PlannedListID, IT_Description.Item_Desc AS Item, IT_PlannedList.Remark, Contractor.Contractor_Name AS CT, IT_PlannedList.OrderedTimes, IT_PlannedList.Qty, SUM(IT_TransContractor.ReceivedQty), IT_PlannedList.Qty - IT_TransContractor.ReceivedQty AS [Awaiting Qty], IT_PlannedList.Unit FROM (((Contractor INNER JOIN IT_PlannedList ON Contractor.Contractor_ID = IT_PlannedList.ContractorID) INNER JOIN IT_TransContractor ON IT_PlannedList.ItemNo = IT_TransContractor.ItemNo AND IT_PlannedList.ContractorID = IT_TransContractor.ContractorID AND IT_PlannedList.OrderedTimes = IT_TransContractor.OrderedTimes) INNER JOIN IT_Description ON IT_TransContractor.ItemNo = IT_Description.ItemNo) "
Dim sqlWhere As String = ""
Select Case num
Case 0 : sqlWhere = ""
Case 1 : sqlWhere = "where Item_Desc LIKE'" & search2 & "'"
Case 2 : sqlWhere = "where Contractor_Name LIKE '" & search & "' "
Case 3 : sqlWhere = "where Contractor_Name LIKE '" & search & "' and Item_Desc LIKE'" & search2 & "'"
End Select
Dim sqlemp As String
Dim group As String = " group by IT_PlannedList.PlannedListID ,IT_Description.Item_Desc, IT_PlannedList.Remark, Contractor.Contractor_Name, IT_PlannedList.OrderedTimes ,IT_PlannedList.Qty,IT_PlannedList.Unit"
sqlemp = sql_search & sqlWhere & group
' MessageBox.Show(num)
da = New OleDbDataAdapter(sqlemp, conn)
da.Fill(ds, "Contractor")
If ds.Tables("Contractor").Rows.Count <> 0 Then
With DataGridView1
.ReadOnly = True
.DataSource = ds.Tables("Contractor")
End With
Else
End If
'------------------------------- ตาราง -----------------------------------
'Dim cs As New DataGridViewCellStyle()
'cs.Font = New Font("Ms Sans Serif", 10, FontStyle.Bold)
With DataGridView1
' .ColumnHeadersDefaultCellStyle = cs 'กำหนดข้อความแต่ละคอลัมน์
.Columns(0).HeaderText = "PlannedListId"
.Columns(1).HeaderText = "Item"
.Columns(2).HeaderText = "Remark"
.Columns(3).HeaderText = "CT"
.Columns(4).HeaderText = "Ordertimes"
.Columns(5).HeaderText = "Qty"
.Columns(6).HeaderText = "Rec Qty"
.Columns(7).HeaderText = "Awaiting Qty"
.Columns(8).HeaderText = "Unit"
.Columns(0).Width = 100 'กำหนดความกว้าง
.Columns(1).Width = 210
.Columns(2).Width = 210
.Columns(2).Width = 210
.Columns(3).Width = 75
.Columns(4).Width = 75
.Columns(5).Width = 50
.Columns(6).Width = 50
.Columns(7).Width = 50
.Columns(8).Width = 50
End With
'------------------------------- ตาราง -----------------------------------
'Catch ex As Exception
' MessageBox.Show("ไม่พบข้อมูล", "Error !!", MessageBoxButtons.OK, MessageBoxIcon.Information)
' 'MessageBox.Show(ex.Message)
'End Try
End Sub
End Class
มานขึ้น error มาแบบนี้อ่ะครับ

|
 |
 |
 |
 |
Date :
2013-10-17 08:56:53 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
IT_TransContractor.ReceivedQty มันไม่ถูก group by
แต่ผมว่าค่าออกมาไม่น่าถูกมั่งนะ รู้สึกอย่างงั้น
|
 |
 |
 |
 |
Date :
2013-10-17 09:03:45 |
By :
anotherdie |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
IT_PlannedList.Qty - IT_TransContractor.ReceivedQty มานคือ จำนวนในที่เกบไว้ ลบ ด้วยจำนวนที่เบิกอ่ะครับ
|
 |
 |
 |
 |
Date :
2013-10-17 09:07:34 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
IT_PlannedList.Qty - IT_TransContractor.ReceivedQty AS [Awaiting Qty]
ลองแก้เป็น
IT_PlannedList.Qty - SUM(IT_TransContractor.ReceivedQty) AS [Awaiting Qty]
|
 |
 |
 |
 |
Date :
2013-10-17 09:08:42 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณนะครับทั้ง2ท่านทีช่วย พอดีผมเพิ่งหัดเขียน vb โปรแกรมเปนงานแรก ยังงงกับภาษาอยู่อ่ะครับ ช่วยชี้แนะด้วยนะครับ
[head]เปลี่ยนเปนใส่ sum -> IT_PlannedList.Qty - SUM(IT_TransContractor.ReceivedQty) AS [Awaiting Qty][head]
sql_search = " SELECT IT_PlannedList.PlannedListID, IT_Description.Item_Desc AS Item, IT_PlannedList.Remark, Contractor.Contractor_Name AS CT, IT_PlannedList.OrderedTimes, IT_PlannedList.Qty, IT_TransContractor.ReceivedQty, sum(IT_PlannedList.Qty - IT_TransContractor.ReceivedQty) AS [Awaiting Qty], IT_PlannedList.Unit FROM (((Contractor INNER JOIN IT_PlannedList ON Contractor.Contractor_ID = IT_PlannedList.ContractorID) INNER JOIN IT_TransContractor ON IT_PlannedList.ItemNo = IT_TransContractor.ItemNo AND IT_PlannedList.ContractorID = IT_TransContractor.ContractorID AND IT_PlannedList.OrderedTimes = IT_TransContractor.OrderedTimes) INNER JOIN IT_Description ON IT_TransContractor.ItemNo = IT_Description.ItemNo) "
Dim sqlWhere As String = ""
Select Case num
Case 0 : sqlWhere = ""
Case 1 : sqlWhere = "where Item_Desc LIKE'" & search2 & "'"
Case 2 : sqlWhere = "where Contractor_Name LIKE '" & search & "' "
Case 3 : sqlWhere = "where Contractor_Name LIKE '" & search & "' and Item_Desc LIKE'" & search2 & "'"
End Select
Dim sqlemp As String
Dim group As String = " group by IT_PlannedList.PlannedListID ,IT_Description.Item_Desc, IT_PlannedList.Remark, Contractor.Contractor_Name, IT_PlannedList.OrderedTimes ,IT_PlannedList.Qty,IT_PlannedList.Unit"
sqlemp = sql_search & sqlWhere & group
มานขึ้น error ครับ
![]]] ]]]](https://www.thaicreate.com/upload/stock/20131017092522.png?v=1001)
|
 |
 |
 |
 |
Date :
2013-10-17 09:27:40 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แก้ไขๆ ลงcode ผิด
sql_search = " SELECT IT_PlannedList.PlannedListID, IT_Description.Item_Desc AS Item, IT_PlannedList.Remark, Contractor.Contractor_Name AS CT, IT_PlannedList.OrderedTimes, IT_PlannedList.Qty, IT_TransContractor.ReceivedQty, IT_PlannedList.Qty - sum(IT_TransContractor.ReceivedQty) AS [Awaiting Qty], IT_PlannedList.Unit FROM (((Contractor INNER JOIN IT_PlannedList ON Contractor.Contractor_ID = IT_PlannedList.ContractorID) INNER JOIN IT_TransContractor ON IT_PlannedList.ItemNo = IT_TransContractor.ItemNo AND IT_PlannedList.ContractorID = IT_TransContractor.ContractorID AND IT_PlannedList.OrderedTimes = IT_TransContractor.OrderedTimes) INNER JOIN IT_Description ON IT_TransContractor.ItemNo = IT_Description.ItemNo) "
Dim sqlWhere As String = ""
Select Case num
Case 0 : sqlWhere = ""
Case 1 : sqlWhere = "where Item_Desc LIKE'" & search2 & "'"
Case 2 : sqlWhere = "where Contractor_Name LIKE '" & search & "' "
Case 3 : sqlWhere = "where Contractor_Name LIKE '" & search & "' and Item_Desc LIKE'" & search2 & "'"
End Select
Dim sqlemp As String
Dim group As String = " group by IT_PlannedList.PlannedListID ,IT_Description.Item_Desc, IT_PlannedList.Remark, Contractor.Contractor_Name, IT_PlannedList.OrderedTimes ,IT_PlannedList.Qty,IT_PlannedList.Unit"
sqlemp = sql_search & sqlWhere & group
|
 |
 |
 |
 |
Date :
2013-10-17 09:29:21 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จาก
IT_TransContractor.ReceivedQty ,
IT_PlannedList.Qty - SUM(IT_TransContractor.ReceivedQty) AS [Awaiting Qty] ,
เอา
IT_TransContractor.ReceivedQty , ออกครับ
|
 |
 |
 |
 |
Date :
2013-10-17 09:37:56 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่สิ
จะเอาโชว์ด้วยนี่นา
เปลี่ยนเป็น
SUM(IT_TransContractor.ReceivedQty) as ReceivedQty ,
IT_PlannedList.Qty - SUM(IT_TransContractor.ReceivedQty) AS [Awaiting Qty] ,
|
 |
 |
 |
 |
Date :
2013-10-17 09:38:53 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าเอาตัว IT_TransContractor.ReceivedQty ออก มันได้อ่ะครับไม่error แต่คือ อยากได้แบบว่า แสดงเปน3ช่อง
จำนวนทั้งหมด จำหนวนที่โดนเบิกไปใช้ทั้งหมด จำนวนที่เหลืออยู่ อ่ะครับ
อันนี้แบบเอา IT_TransContractor.ReceivedQty ออก

|
 |
 |
 |
 |
Date :
2013-10-17 09:48:04 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เปลี่ยนเป็น
SUM(IT_TransContractor.ReceivedQty) as ReceivedQty ,
IT_PlannedList.Qty - SUM(IT_TransContractor.ReceivedQty) AS [Awaiting Qty] ,  
|
 |
 |
 |
 |
Date :
2013-10-17 09:52:22 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากครับ ได้แล้วลองแก้ตามที่ FONFIRE บอกในให้เปลี่ยน
เปลี่ยนเป็น
SUM(IT_TransContractor.ReceivedQty) as ReceivedQty ,
IT_PlannedList.Qty - SUM(IT_TransContractor.ReceivedQty) AS [Awaiting Qty] ,

คือตอนแรกที่error เพราะเราsumค่า IT_TransContractor.ReceivedQty แค่ที่เดียวเลยerror ใช่ป่ะครับ
|
 |
 |
 |
 |
Date :
2013-10-17 10:09:49 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทุก field ที่เอามาใช้ใน group
ถ้าไม่ใส่สูตรคำนวณ
ก็ต้องไปอยู่ใน group by ครับ
|
 |
 |
 |
 |
Date :
2013-10-17 10:11:40 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อ่อครับ ขอบคุณมากครับ
|
 |
 |
 |
 |
Date :
2013-10-17 10:19:00 |
By :
ปวีณวัช |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|