 |
|
ถามเกี่ยวกับ Group by ใน sql server ค่ะ สวัสดีค่ะ คือต้องการ หาผลรวมของปริมาณเลือดแต่ละหมู่ค่ะ |
|
 |
|
|
 |
 |
|
มันมี Table หน้าตายังไงอ่ะครับ มีข้อมูลอย่างไง
Quantity = > มันคืออะไร ครับ แล้ว ที่บอกว่าลองใส่ข้อมูลไป แล้ว ลองยกตัวอย่างให้หน่อยนะครับ
|
 |
 |
 |
 |
Date :
2010-02-26 14:11:47 |
By :
ksillapapan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ปกติเขาเขียนแบบนี้
SELECT BloodGroup, Quantity
FROM CallEmerge
GROUP BY BloodGroup, Quantity
ถ้า Quantity เป็น datatype แบบ numberic มันจะรวม SUM ให้เองครับ
|
 |
 |
 |
 |
Date :
2010-02-26 14:33:07 |
By :
numenoy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณค่ะ *0* Quantity = ปริมาณ Bloodgroup = กรุ๊ปเลือด
แล้วที่ insertสิ่งที่แตกต่างคือประมาณนี้ค่ะ
A 10
B 20
A 40
O 15
คือได้ทดลองตามโค๊ดที่แนะมาเรียบร้อยแล้ว ส่วน datatype ก็เปนแบบ numberic
ผลคือว่า มันจัดเรียงข้อมูลที่เหมือนๆกันไว้ติดกันแล้วค่ะ **แต่ มันยังไม่ได้ SUM ให้อ่ะค่ะ
มันเป็นปัญหาที่อะไรหนอ
|
 |
 |
 |
 |
Date :
2010-02-26 19:26:54 |
By :
ladyjupz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|


คำสั่งควรจะได้ผลลัพธ์ที่ถูก
แต่ ERROR แจ้งว่า QUANTITY ไม่ใช่ Column
ขอดูโครงสร้าง Table นี้ และ CODE VB ช่วงนี้ COPY มาเลย
จัดมาค่ะ
|
 |
 |
 |
 |
Date :
2010-02-26 23:16:00 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

Code (VB.NET)
ถ้าเป็นแบบ code เก่าหนู อันแรก มันจะ error แบบที่บอกอ่ะค่ะ
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient"%>
<%@Import Namespace="System.IO" %>
<%@ Page Language="VB" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<script runat="server">
Dim objConn As SqlConnection
Dim objCmd As SqlCommand
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim strConnString As String
strConnString = "Server=localhost;UID=sa;PASSWORD=xxxx;database=blooddb;Max Pool Size=400;Connect Timeout=600;"
objConn = New SqlConnection(strConnString)
objConn.Open()
BindData()
Label2.Text = "Last update :" + " " + DateTime.Now.ToString()
End Sub
Sub IntervalTimer_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles IntervalTimer.Tick
Label2.Text = "Last update :" + " " + DateTime.Now.ToString()
BindData()
End Sub
Sub BindData()
Dim ds As DataSet
ds = CreateDataSet()
myRepeater.DataSource = ds.Tables(0).DefaultView
myRepeater.DataBind()
End Sub
Function CreateDataSet() As DataSet
Dim objConn As New System.Data.SqlClient.SqlConnection
Dim objCmd As New System.Data.SqlClient.SqlCommand
Dim dtAdapter As New System.Data.SqlClient.SqlDataAdapter
Dim wr As StreamWriter = File.CreateText(Server.MapPath("computeblood.xml"))
Dim ds As New DataSet
Dim strConnString,strSQL As String
strConnString = "Server=localhost;UID=sa;PASSWORD=xxxx;database=blooddb;Max Pool Size=400;Connect Timeout=1000;"
strSQL = "SELECT BloodGroup,SUM(Quantity) FROM CallEmerge GROUP BY BloodGroup"
objConn.ConnectionString = strConnString
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
End With
dtAdapter.SelectCommand = objCmd
dtAdapter.Fill(ds)
'***ds.WriteXml(Server.MapPath("computeblood.xml"))***'
ds.WriteXml(wr)
wr.Close()
dtAdapter = Nothing
objConn.Close()
objConn = Nothing
Return ds '*** Return DataSet ***'
End Function
</script>
|
 |
 |
 |
 |
Date :
2010-02-26 23:48:12 |
By :
ladyjupz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ดูจนตาเหล่ ยังไม่เห็นอะไรผิดปกติ
งั้นลองเอา
SELECT BloodGroup ,SUM(Quantiity)
FROM [CALLEMERGE]
GROUP BY BloodGroup;
ไปรันที่ SQL MANAGEMENT STUDIO แล้วขอดูผลรันค่ะ
อีกอย่าง CAP Error ของ VB Code ออกมาให้ด้วยนะคะ
พี่ๆคนไหนเห็น อะไรผิดปกติมั่งปะคะ
|
 |
 |
 |
 |
Date :
2010-02-27 00:37:09 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
นี่คือ error ที่ captureมาค่ะ

คือหนูรันใน sql server management ไม่เปนอ่ะคะ แหะๆ ปกติใช้browser run ตลอด^^"
แล้วงงอย่างนึงค่ะว่า ถ้าเขียนโค๊ดนี้ ตามที่ คุณ numenoy บอกมัน compile ผ่าน คือgroup แต่ไม่ sum ออกมาประมาณแบบนี้น่ะค่ะ
Code (VB.NET)
strSQL = "SELECT BloodGroup,Quantity FROM CallEmerge GROUP BY BloodGroup,Quantity"

|
 |
 |
 |
 |
Date :
2010-02-27 01:35:43 |
By :
ladyjupz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
นี่ค่ะ รอง run ใน sql server ได้ผลถูกต้อง แสดงว่ามีปัญหาที่เขียน sqlใน vb.netหรือป่าว TT_TT หนูก้อว่าหนูเขียนไม่ผิดนี่นา

|
 |
 |
 |
 |
Date :
2010-02-27 13:03:33 |
By :
ladyjupz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โอ้ พี่ๆคะหนูเจอมันแล้ววว คือหนูลองเปลี่ยน
strSQL = "SELECT BloodGroup,SUM(Quantity) AS Total FROM CallEmerge GROUP BY BloodGroup"
ที่มันผิดคือ หนูให้ ตรง repeater มันดึงจากตารางเก่า = ='
<td><%#Container.DataItem("BloodGroup") %></td>
<td><%#Container.DataItem("Quantity") %></td>
ซึ่งที่ถูกต้อง ความจิงแล้ว มันต้องไปดึงจากตารางใหม่
<td><%#Container.DataItem("BloodGroup") %></td>
<td><%#Container.DataItem("Total") %></td>
555+ เพิ่งมา อ๋อหลังจาก รันใน sql server management studio ไม่ง้านนั่งดูจนตาเหล่ทั้งคืนก้อไม่ออก
ขอบคุณทุกคนมากนะคะๆ ^/\^ แล้วหนูจะเก็บไว้เปนประสบการณ์
|
 |
 |
 |
 |
Date :
2010-02-27 13:23:09 |
By :
ladyjupz |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ยินดีด้วยค่ะ เดวมาจัดลูกตาๆให้หายตาเหล่ด้วยกันค่ะ ^^
|
 |
 |
 |
 |
Date :
2010-02-27 13:30:28 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|