Postgresql中的动态列生成

时间:2014-07-17 10:45:26

标签: sql sql-server postgresql

我需要帮助来生成动态列,但采用以下格式:

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);

我的输出显示在图像中 enter image description here

我想在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'

0 个答案:

没有答案