从DB中选择更多值到DataSet中的一个字段

时间:2015-11-04 11:18:59

标签: sql sql-server tsql delphi adodb

我需要从DB中选择更多值并将其放入数据集中的一个字段中。

我在delphi中有方法,它有输入参数TDataSet并将数据集中的值导出到Excel。

我要导出的字段之一是用","分隔的多个值。从其他表。

我有这张表:

目录促销

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。 :我正在使用 - Delphi XE6,ADODB,MS SQL-SERVER ....结果必须是TDataSet

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:-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;