Помогите с SQL запросом в Access2000...

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Помогите с SQL запросом в Access2000...

Сообщение Rojohn » 22.06.2007 (Пт) 8:42

Здравствуйте эксперты!
Подскажите пожалуйста, как подсчитать кол-во сгруппированных записей по
группам и вывести эти суммы рядом с каждым сгруппированным значением
в следующем запросе:
Код: Выделить всё

SELECT [KIND_GUN].[TITLE], [TYPE_GUN].[TITLE] AS T_G, [CODE_GUN].[KINDGUN_CODE], C1.Code AS CC1, C2.Code AS CC2, C3.Code AS CC3, C4.Code AS CC4, Count([GUN].[ID]) AS KOL
FROM PERMISSION, PERMISSION_GUN, GUN, CODE_GUN, MODEL_TITLE, TYPE_GUN, KIND_GUN, CALIBR AS C1, CALIBR AS C2, CALIBR AS C3, CALIBR AS C4
WHERE ((([MODEL_TITLE].[CODE])=[CODE_GUN].[MODEL_TITLE]) And (([GUN].[ID])=[PERMISSION_GUN].[GUN_ID]) And (([GUN].[CODEGUN_CODE])=[CODE_GUN].[CODE]) And ((C1.Number)=[CODE_GUN].[CALIBR_CODE1]) And ((C2.Number)=[CODE_GUN].[CALIBR_CODE2]) And ((C3.Number)=[CODE_GUN].[CALIBR_CODE3]) And ((C4.Number)=[CODE_GUN].[CALIBR_CODE4]) And (([TYPE_GUN].[CODE])=[CODE_GUN].[TYPE_GUN_CODE] And ([TYPE_GUN].[CODE])=[KIND_GUN].[code]) And (([PERMISSION_GUN].[PERMIS_NUMB])='3434444') And (([PERMISSION_GUN].[PERMIS_SERIES])='XXX'))
GROUP BY [KIND_GUN].[TITLE], [TYPE_GUN].[TITLE], [CODE_GUN].[KINDGUN_CODE], C1.Code, C2.Code, C3.Code, C4.Code;

Ну и чего ты ожидал, обрамляя в теги code код, содержащий тег code? -- GSerg

В результате должно получиться что-то вроде:
| TITLE | T_G | KINDGUN_CODE | CC1 | CC2 | CC3 | CC4 | KOL |
-------------------------------------------------------------------------------------------------------------
| TITLE1 | T_G1 | KG_C1 | CC1_1 | CC2_1 | CC3_1 | CC4_1 | 2 |
| TITLE2 | T_G2 | KG_C2 | СС1_2 | CC2_2 | CC3_2 | CC4_2 | 4 |
...

Причем выражение Count([GUN].[ID]) AS KOL не верно, должно быть по-другому. Запрос используется в MSAccess2000 и выше. Спасибо!
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.06.2007 (Пт) 10:40

Count(*)
Просто count(*).
RTFM.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

:)

Сообщение Rojohn » 22.06.2007 (Пт) 12:37

Сорри! Просто ошибка в самом запросе с объединениями, а я грешил на Count. Попробую исправить, потом скажу, что получилось...
Спасибо!
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Ещё вопрос...

Сообщение Rojohn » 22.06.2007 (Пт) 15:01

Вот такой запрос работает правильно:

SELECT KIND_GUN.TITLE, TYPE_GUN.TITLE AS T_G, CODE_GUN.KINDGUN_CODE, C1.Code AS CC1, C2.Code AS CC2, C3.Code AS CC3, C4.Code AS CC4, Count(*) AS KOL
FROM PERMISSION_GUN, GUN, CODE_GUN, MODEL_TITLE, TYPE_GUN, KIND_GUN, CALIBR AS C1, CALIBR AS C2, CALIBR AS C3, CALIBR AS C4
WHERE (((MODEL_TITLE.CODE)=[CODE_GUN].[MODEL_TITLE]) AND ((GUN.ID)=[PERMISSION_GUN].[GUN_ID]) AND ((GUN.CODEGUN_CODE)=[CODE_GUN].[CODE]) AND ((C1.Number)=[CODE_GUN].[CALIBR_CODE1]) AND ((C2.Number)=[CODE_GUN].[CALIBR_CODE2]) AND ((C3.Number)=[CODE_GUN].[CALIBR_CODE3]) AND ((C4.Number)=[CODE_GUN].[CALIBR_CODE4]) AND ((TYPE_GUN.CODE)=[CODE_GUN].[TYPE_GUN_CODE] And (TYPE_GUN.CODE)=[KIND_GUN].[CODE]) AND ((PERMISSION_GUN.PERMIS_NUMB)='3434444') AND ((PERMISSION_GUN.PERMIS_SERIES)='РХИ'))
GROUP BY KIND_GUN.TITLE, TYPE_GUN.TITLE, CODE_GUN.KINDGUN_CODE, C1.Code, C2.Code, C3.Code, C4.Code;

А можно ли приписать ещё сумму строковых значений одного из полей внутри каждой группы?
Последний раз редактировалось Rojohn 22.06.2007 (Пт) 15:17, всего редактировалось 1 раз.
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.06.2007 (Пт) 15:07

Можно.
Lasciate ogni speranza, voi ch'entrate.

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

???

Сообщение Rojohn » 22.06.2007 (Пт) 15:33

Спасиба, конечно, а как? Чтоб разделитель был запятая между ними...
:?:
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

??

Сообщение Rojohn » 25.06.2007 (Пн) 10:02

Алибек, как насчёт уточнения? Или мы говорили о разных ситуациях? :?:
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 25.06.2007 (Пн) 10:32

"," & Field1 & "," & Field2

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

??

Сообщение Rojohn » 25.06.2007 (Пн) 11:15

До этого я бы и сам допер, дело-то в том, что поля нужно сложить внутри каждой группы, а если так написать в Select, то он будет ругаться на отсутствие этих полей в группировке...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

?

Сообщение Rojohn » 26.06.2007 (Вт) 9:06

Так что, мона или нет так?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Re: ?

Сообщение Gloom » 26.06.2007 (Вт) 11:27

Rojohn писал(а):Так что, мона или нет так?

Я так, например, делал:
Код: Выделить всё

SELECT F1, SummString("MyTable","F1",[F1],"F2") AS SumF2
FROM MyTable
GROUP BY F1


Код: Выделить всё

Public Function SummString(ByVal TableName As String, ByVal GroupFieldName As String, ByVal GroupFieldValue As Variant, ByVal ConcatenateFieldName As String) As String
    Dim strReturn As String
    Dim cmd As New ADODB.Command
    Dim recSet As New ADODB.Recordset
   
    cmd.CommandText = "select [" & ConcatenateFieldName & "] from [" & TableName & "] where [" & GroupFieldName & "] = ?"
    cmd.ActiveConnection = CurrentProject.Connection
    cmd.Parameters(0) = GroupFieldValue
    recSet.Open cmd
    If Not recSet.EOF Then
        strReturn = recSet.GetString(adClipString, -1, "", ",", "")
        SummString = Left(strReturn, Len(strReturn) - 1)
    End If
End Function

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

!

Сообщение Rojohn » 26.06.2007 (Вт) 20:17

Весьма интересное решение, но я пока не разобрал его как следует. Дело в том, что я пока что решил вопрос с помощью двух рекордсетов и вроде всё работает. Но с этими примерами обязательно разберусь, т.к. с ADODB мне ещё работать надо будет... Спасибо!
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 235

    TopList