我需要帮助来生成动态列,但采用以下格式:
1行*(4个固定列) - 针对一个第一id值重复4列 例如:如果第一列中有8个ID,则会创建8 * 4列 我已经在SQL Sever 2008中成功完成了它,但现在我想在Postgres中完成它。
为此,我有以下数据:
CREATE TABLE T (cdfid int , headcategoriesid nvarchar(4) , headid int , grade int);
INSERT INTO T
(cdfid , headcategoriesid , headid , grade )
VALUES
(69, 7, 301 ,3001) ,
(69, 8, 301 ,3002),
(69, 6, 302 ,3001),
(69, 5, 302 ,3001),
(69, 4, 303 ,3002),
(69, 3, 303 ,3001),
(69, 15, 304 ,3001),
(69, 9, 304 ,3002),
(69, 1, 305 ,3001),
(69, 2, 305 ,3003);
我的输出显示在图像中
我想在Postgres中输出
查询SQL Server
DECLARE @Cols NVARCHAR(MAX) = STUFF((SELECT DISTINCT ',' + QUOTENAME(headcategoriesid + Col)
FROM T
CROSS JOIN (VALUES ('_headid'), ('_grade')) c (col)
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
select @Cols
DECLARE @SQL NVARCHAR(MAX) ='select * from
(
SELECT [Col] = headcategoriesid + ''_'' + col,
Value,headcategoriesid
FROM T
UNPIVOT
( Value
FOR Col IN ([headid], [grade])
) Upvt
) p
pivot (
Sum(Value) for [Col] in ('+@Cols+') ) as oc'