我需要从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
答案 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;