2014-12-03 3 views
1

У меня есть SQL datbase со следующим:Как подсчитать уникальные строки В Sql Vb.Net

Продукт: Количество:

  • PCB1 2
  • PCB1 6
  • рСВ2 54
  • PCB2 23

im заинтересован в подсчете количества одного и того же продукта и отображать его в виде datagrid.

сразу после команды sql и следующего кода для заполнения datagridview.

Так я бы видеть в DataGridView:

Продукт: Количество:

  • PCB1 8
  • рСВ2 77

Если кто-то может помочь, это было бы здорово.

Большое спасибо, Пит :)

+0

Довольно простой синтаксис SQL. Поиск GROUP BY и SUM. – Steve

+0

5 центов - 4 способа. 1 - пусть db двигатель подытожит для вас. Получите все записи для клиента и 2 - вы можете использовать Linq или 3 - Ado.Net 'dataTable'. Или, что еще хуже, 4 - вы можете перебирать записи «вручную» и писать свою собственную логику. Выберите свой яд. –

+0

@ T.S., Я всегда нашел LINQ в качестве автономного ссылочного термина, чтобы быть довольно неоднозначным в этом контексте. DataContext или DbContext в LINQ To SQL выглядит как лучший способ охвата и относится к людям, которые так рано развиваются. «Или даже возникло, 4 - это то, что люди будут делать независимо от того, как они используют, чтобы сделать соединение, а затем потоком, буфером, сериализовать ... этот вид идет с' 1 - let db engine ... ' также; это будет сообщение и поток, не так ли? предоставление данных, которые «будут» сериализованы клиентом. –

ответ

3

Это псевдо-код, который загружает DataGridView с требуемым запросом

Using con = new MySqlConnection(....) 
Using cmd = new MySqlCommand("select product, Sum(amount) from tableName GROUP BY product", con) 
    con.Open() 
    Dim dt = new DataTable() 
    Using dr = cmd.ExecuteReader() 
     dt.Load(dr) 
     dataGridView.DataSource = dt 
    End Using 
End Using 
End Using 

Обратите внимание, что вы должны использовать правильный TABLENAME для ваших данных и добавить информацию о ConnectionString, которые будут использоваться при вы создаете соединение

+0

Привет, Стив, спасибо для ответа :) быстрый вопрос, трудно ли изменить этот код, чтобы подсчитать, сколько раз тот же самый продукт находится в db? например если у продукта не было суммы и он просто полагался на подсчет имен и дал тот же эффект в datagridview? Many Thanks –

+0

Просто добавьте еще один столбец в запрос, который является результатом _count (product) _ ie _select product, count (product) как productcounter, sum (amount) как totalproduct из группы tablename по продукту – Steve

+0

работает как шарм, много спасибо Стив! :) –

1

Вам нужно будет указать строку соединения и правильное имя таблицы. Следующий код также предполагает DataGridView с именем DataGridView1.

Dim sqlconn As New SqlConnection 
sqlconn.ConnectionString = "SQL CONNECTION STRING GOES HERE" 
Dim strSQL As String = "select product, SUM(amount) from tableName group by product" 
Dim myDataTable As New DataTable 
Dim mySqlCommand As New SqlCommand(strSQL, sqlconn) 
Dim mySqlDataAdapter As New SqlDataAdapter 
sqlconn.Open() 
Dim ds As DataSet = New DataSet() 
mySqlDataAdapter.Fill(ds) 
DataGridView1.DataSource = ds 
sqlconn.Close() 
+0

как бы я заполнил datagridview этим кодом? –

+0

@PeterJames Я добавил код VB.Net. – Donal

+1

@PeterJames, элемент данных datasource привязываемого элемента управления может быть любым классом с общедоступными/доступными свойствами. Вы можете изменять аспекты проектирования с помощью System.Attributes и реализовывать интерфейсы, которые используются для управления связующими элементами для механизмов подчеркивания, таких как механизм привязки, который позволяет вам внедрять IPropertyNotify в вашем классе. –

Смежные вопросы