Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подскажите как написать запрос
 
 автор: snipe   (27.01.2012 в 09:55)   личное сообщение
 
 

Доброго времени суток
Можно ли запросом выборку по одному полю собрать значения в одно текстовое значение
например
имеем

один
два
три

что бы получилось: один; два; три
В SQL я видел что можно
там текст примерно такой
STUFF(( select '; ' + koap50.KOAP_ARTICLE_NAME
from IAS_RPN.IC_HIERARHY hh50
inner join IAS_RPN.IC_DOC_1050 t50 on hh50.CHILD_IC_ID = t50.IC_ID
INNER JOIN IAS_RPN.R_KOAP koap50 on koap50.koap_id = t50.BROKEN_ARTICLE
where hh50.PARENT_IC_ID = t.IC_ID
group by koap50.KOAP_ARTICLE_NAME order by 1
FOR XML PATH('')), 1, 2, '') ATCLES_1050,

однако это конструкция под аксом работать не хочет
собака-лар

ну что бы не мучаться за основу можно взять простенький запрос
Select Таблица1.Поле1
From Таблица1

Заранее спасибо

  Ответить  
 
 автор: silich   (27.01.2012 в 10:01)   личное сообщение
 
 

переходи на Оракл :)

здесь предлагают как то так
http://allenbrowne.com/func-concat.html

ну ил итак вот можно, я попробовал на простом...

Function cct$(key, value)
Static avalue$, akey
On Error Resume Next
If Nz(akey, "") = key Then
    avalue = value & "," & avalue
Else
    akey = key
    avalue = value
End If
cct = avalue
End Function


SELECT conc.grp, conc.pole, cct([grp],[pole]) AS cc
FROM conc
ORDER BY conc.grp, conc.id;



grp    pole    cc
0    один    один
0    два    два,один
0    три    три,два,один
0    четыре    четыре,три,два,один
1    пять    пять
2    шесть    шесть
2    семь    семь,шесть
2    восемь    восемь,семь,шесть
2    девять    девять,восемь,семь,шесть
2    десять    десять,девять,восемь,семь,шесть

  Ответить  
 
 автор: snipe   (27.01.2012 в 10:06)   личное сообщение
 
 

рад бы
учиться опять же надо

придется видимо функцию написать
пока вижу такой выход

все равно интересно а можно ли так сделать

  Ответить  
 
 автор: Дядя Федор   (27.01.2012 в 10:57)   личное сообщение
 
 

Лови функцию

'---------------------------------------------------------------------------------------
' Procedure : DSUMSTR
' DateTime  : 25.12.2011 09:11
' Author    : lavrushkin (ДФ)
'---------------------------------------------------------------------------------------
'"Суммирование" строковых значений
Public Function DSUMSTR _
(EXPRESSION As String, Domain As String, Optional WHERECONDITION As String = "", Optional point As String = ";", Optional analis As Boolean = False) As String
DSUMSTR = ""
'EXPRESSION - поле
'DOMAIN - источник данных
'point - разделитель - по умолч ";"
'analis - true - исключать одинаковые, false - все подряд
Dim rst As DAO.Recordset, srez As String
On Error GoTo Er_dsumstr
srez = ""
If Len(WHERECONDITION) > 0 Then
 Domain = "[" & Domain & "]." & "[" & EXPRESSION & "] from " & Domain & " WHERE " & "[" & Domain & "]." & WHERECONDITION
End If
Set rst = CurrentDb.OpenRecordset("Select " & Domain & ";")
      With rst
      If rst.RecordCount > 0 Then
        .MoveFirst
        While Not .EOF
        If analis Then 'исключаем новую строку, если она уже есть в сумме
          If InStr(1, Nz(.Fields(EXPRESSION)), srez) = 0 Then
            srez = srez & IIf(Nz(.Fields(EXPRESSION), "") = "", "", .Fields(EXPRESSION) & point)
          End If
        Else
        srez = srez & IIf(Nz(.Fields(EXPRESSION), "") = "", "", .Fields(EXPRESSION) & point)
        End If
        .MoveNext
        Wend
      End If
      End With
Set rst = Nothing
If point <> "" And Len(srez) = 1 Then srez = ""
DSUMSTR = srez
Exit Function
Er_dsumstr:
MsgBox "Ошибка DSUMSTR " & Domain & " " & Err.Number & " (" & Err.Description & ")"

End Function

  Ответить  
 
 автор: osmor   (27.01.2012 в 11:42)   личное сообщение
 
 

http://hiprog.com/index.php?option=com_content&task=view&id=334&Itemid=35

  Ответить  
 
 автор: silich   (27.01.2012 в 11:52)   личное сообщение
 
 

  Ответить  
 
 автор: snipe   (27.01.2012 в 12:40)   личное сообщение
 
 

сижу разбираюсь
Спасибо

  Ответить  
 
 автор: Дядя Федор   (27.01.2012 в 14:48)   личное сообщение
 
 

Приведенные методы интересны, но у них есть один недостаток.
Это программирование под каждый случай промежуточных запросов или таблиц.
Для разумных объемов ф-я DSUMSTR вполне работоспособна.
К тому же может забирать строки из, например, связанных таблиц, запросов и т.п.
А также способна фильтровать повторения.

При большом объеме, конечно, медленно. Но удобноооо.

  Ответить  
 
 автор: snipe   (27.01.2012 в 17:31)   личное сообщение
 
 

нашел интересную функцию
join(массив,разделитель)
вот пытаюсь
с getrows и этой функцией эксперементировать
пока безрезультатно

  Ответить  
 
 автор: snipe   (27.01.2012 в 18:13)   личное сообщение
 
 

Получилось как-то так

Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "SELECT Клиенты.ФИО FROM Клиенты", CurrentProject.Connection, adOpenStatic, adLockReadOnly
DSumStr = Replace(rst.GetString, Chr(13), "; ")

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList