|
|
|
| Доброго времени суток
Можно ли запросом выборку по одному полю собрать значения в одно текстовое значение
например
имеем
один
два
три
что бы получилось: один; два; три
В 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
Заранее спасибо | |
|
| |
|
|
|
| переходи на Оракл :)
здесь предлагают как то так
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 десять десять,девять,восемь,семь,шесть
|
| |
|
| |
|
|
|
| рад бы
учиться опять же надо
придется видимо функцию написать
пока вижу такой выход
все равно интересно а можно ли так сделать | |
|
| |
|
|
|
| Лови функцию
'---------------------------------------------------------------------------------------
' 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
|
| |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=view&id=334&Itemid=35 | |
|
| |
|
|
|
|
|
| Приведенные методы интересны, но у них есть один недостаток.
Это программирование под каждый случай промежуточных запросов или таблиц.
Для разумных объемов ф-я DSUMSTR вполне работоспособна.
К тому же может забирать строки из, например, связанных таблиц, запросов и т.п.
А также способна фильтровать повторения.
При большом объеме, конечно, медленно. Но удобноооо. | |
|
| |
|
|
|
| нашел интересную функцию
join(массив,разделитель)
вот пытаюсь
с getrows и этой функцией эксперементировать
пока безрезультатно | |
|
| |
|
|
|
| Получилось как-то так
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "SELECT Клиенты.ФИО FROM Клиенты", CurrentProject.Connection, adOpenStatic, adLockReadOnly
DSumStr = Replace(rst.GetString, Chr(13), "; ")
|
| |
|
| |