Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
TSQL垂直列出水平行_Sql_Tsql - Fatal编程技术网

TSQL垂直列出水平行

TSQL垂直列出水平行,sql,tsql,Sql,Tsql,我需要列出按标题字段垂直分组的行。我在下面有一张样品表。我已经查看了pivot,但不确定如果在一个Cam_Id下有未知(1-100)数量的PkgId,该如何工作 我需要它看起来像。对不起,jpeg,但我不知道如何在这里放一张桌子 CamID Pkgid Pkgid PkgId Pkgid Pkgid PkgId Pkgid Pkgid PkgId..... 我建议您使用string\u agg()并将结果放在一个带分隔符的列中: select cam_id, string_ag

我需要列出按标题字段垂直分组的行。我在下面有一张样品表。我已经查看了pivot,但不确定如果在一个Cam_Id下有未知(1-100)数量的PkgId,该如何工作

我需要它看起来像。对不起,jpeg,但我不知道如何在这里放一张桌子

CamID Pkgid Pkgid PkgId Pkgid Pkgid PkgId Pkgid Pkgid PkgId..... 

我建议您使用
string\u agg()
并将结果放在一个带分隔符的列中:

select cam_id,
       string_agg(pkgid, ',') within group (order by pkgid) as pkgids
from t
group by cam_id;
如果您确实想将数据透视到单独的列中,可以使用如下构造:

select cam_id,
       max(case when seqnum = 1 then pkgid end) as pkgid_1,
       max(case when seqnum = 2 then pkgid end) as pkgid_2,
       max(case when seqnum = 3 then pkgid end) as pkgid_3,
       . . .
from (select t.*,
             row_number() over (partition by cam_id order by pkgid) as seqnum
      from t
     ) t
group by cam_id;

但是,您需要知道最大数量。或者,您可以使用动态SQL构造列数正确的语句。

编辑问题时,请在适当的列中写入数据。突出显示并单击
{}
。您可以使用或使用管道(|)中包含的列名和列值,并通过破折号(-)将列名(第一行)与表行分隔开:这将以可读格式为您格式化表。