Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在数据集中的一个字段中从DB中选择更多值_Sql_Sql Server_Tsql_Delphi_Adodb - Fatal编程技术网

Sql 在数据集中的一个字段中从DB中选择更多值

Sql 在数据集中的一个字段中从DB中选择更多值,sql,sql-server,tsql,delphi,adodb,Sql,Sql Server,Tsql,Delphi,Adodb,我需要从数据库中选择更多的值,并将其放入数据集中的一个字段中 我在delphi中有一个方法,它有输入参数TDataSet,并将数据集中的值导出到Excel 我要导出的字段之一是多个值,这些值用“,”从其他表中分隔 我有以下表格: KATALOG ID_Katalog | atribut_1 ---------------------- 1 | xxx KATALOGxPOLOZKA ID_POLOZKA | ID_KATALOG -----------------------

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

我在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个值


备注:Im使用-Delphi XE6、ADODB、MS SQL-SERVER。。。。结果必须是TDataSet

您可以在子选择中使用
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;

您可以在子选择中使用
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;
smth类似:

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;
smth类似:

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;

哪个查询有这个结果?如何在一个字段中选择更多以“,”分隔的值?请参考此问题,谢谢您的参考。。。我以前没有发现这个问题哪个查询有这个结果?如何在一个字段中选择更多以“,”分隔的值?请参考此问题,谢谢您的参考。。。我以前没有发现这个问题,它叫做伪代码。。给出一般结构,让提问者找出确切的句法,所以你必须提到这一点。否则它会让人困惑,为什么要在这里使用while?外部while用于处理所有记录,内部while用于将同一主机的详细记录保存在一起。无需我们可以使用COALESCE或xml path()方法,它被称为伪代码。。给出一般结构,让提问者找出确切的句法,所以你必须提到这一点。否则它会让人困惑,为什么要在这里使用while?外部while用于处理所有记录,内部while用于将同一主机的详细记录保存在一起。无需我们可以使用COALESCE或xml path()方法