2015-11-04 3 views
1

Мне нужно выбрать больше значений из БД и поместить их в одно поле в наборе данных.Выберите больше значений из БД в одно поле в DataSet

У меня есть метод в delphi, который имеет параметр ввода TDataSet и экспортирует значения из набора данных в Excel.

Одним из полей, которые я хочу экспортировать, является несколько значений, разделенных «,» из другой таблицы.

У меня есть эти таблицы:

Katalog

ID_Katalog | atribut_1 
---------------------- 
1   | xxx 

KATALOGxPOLOZKA

ID_POLOZKA | ID_KATALOG 
----------------------- 
1   | 1 
2   | 1 
3   | 1 

мне нужен этот результат:

ID_Katalog | atribut_1 | polozka 
-------------------------------- 
1   | xxx  | 1, 2, 3 

Есть ли какой-либо способ, как я могу это сделать?

Я попробовал подзапрос, но подзапрос не может вернуть более 1 значения.

P.S. : Im помощь - Delphi XE6, ADODB, MS SQL-Server .... результат должен быть TDataset

+0

создать нормальный запрос – Zam

+0

какой запрос имеет этот результат? как я могу выбрать больше значений, разделенных символом «,» в одном поле? – KubitaS

+2

этот вопрос http://stackoverflow.com/questions/21760969/multiple-rows-to-one-comma-separated-value –

ответ

2

Вы можете использовать пункт FOR XML в подвыборки конкатенировать так:

SELECT 
     K.ID_Katalog, 
     K.attribut_1, 
     STUFF 
     (
     (
      SELECT 
        ', ' + CAST(P.ID_POLOZKA AS varchar) 
       FROM 
        KATALOGxPOLOZKA P 
       WHERE 
        P.ID_KATALOG = K.ID_Katalog 
       FOR XML PATH('') 
     ), 1, 2, '' 
    ) AS polozka 
    FROM 
     KATALOG K; 
-2

как-л:

recs:=sqlExecute(join the tables) 
while not recs.eof() do 
begin 
    s:=recs.fields['join field from master table') 
    dataset.append, and init other fields 
    while (not recs.eof()) and s=recs.fields['join field from master table') do 
    begin 
    dataset.fields['concat field']:=dataset.fields['concat field'] + recs.field['polozka'] + ', '; 
    recs.next; 
    end; 
    cut trailing comma 
    dataset.post; 
end; 
+1

что это? ... –

+0

его названный псевдокод .., дающий общую структуру, для афера, чтобы выяснить точный синтаксис – Jur

+0

, поэтому вы должны это упомянуть. в противном случае это будет запутанным, и почему вы используете в то время как здесь? –