格式化3D直方图的SQL Server查询结果

时间:2014-08-25 11:39:19

标签: mysql sql sql-server excel histogram

我有一个这样的表,它存储3D直方图数据。

CREATE TABLE [dbo].[HISTOGRAM_3D](
    [H3D_X] [decimal](6, 2) NULL,
    [H3D_Y] [decimal](6, 2) NULL,
    [H3D_Z] [decimal](6, 2) NULL
)

我使用此查询来获取直方图的数据:

SELECT h3d.H3D_X, H3D_Y, SUM(h3d.H3D_Z) AS VALUE 
    FROM HISTOGRAM_3D h3d
    GROUP BY h3d.H3D_X, H3D_Y
    ORDER BY h3d.H3D_X ASC

现在,我得到的是这样的:

H3D_X | H3D_Y | VALUE
H3D_X | H3D_Y | VALUE
H3D_X | H3D_Y | VALUE
H3D_X | H3D_Y | VALUE
....

但是,我想将结果格式化为以下格式,因为使用MS Excel显示图表非常容易。

---------------------- | ---- H3D_X VALUES -----------
H3D_Y VALUES | VALUE | VALUE | VALUE  ......
H3D_Y VALUES | VALUE | VALUE | VALUE  ......
H3D_Y VALUES | VALUE | VALUE | VALUE  ......
H3D_Y VALUES | VALUE | VALUE | VALUE  ......

是否可以在SQL中实现它?

1 个答案:

答案 0 :(得分:0)

解决!一种可能的解决方案是使用这样的动态查询:

DECLARE @cols AS NVARCHAR(MAX),         @ query_histogram_3d AS NVARCHAR(MAX)

select @cols = STUFF((SELECT',' + QUOTENAME(H3D_X) 
                FROM SL_HISTOGRAM_3D
                WHERE H3D_CL_ID = @CYCLE_ID
                GROUP BY H3D_X
                ORDER BY H3D_X
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query_histogram_2d = N'SELECT H3D_CL_ID, H3D_Y, ' + @cols + N' FROM 
            (
            SELECT H3D_CL_ID, H3D_X, H3D_Y, SUM(H3D_Z) AS VALUE
            FROM SL_HISTOGRAM_3D
            WHERE H3D_CL_ID = ' + CONVERT(varchar(20),@CYCLE_ID) + N'
            GROUP BY H3D_CL_ID, H3D_X, H3D_Y
        ) x
        PIVOT 
        (
            MAX(VALUE)
            FOR H3D_X IN (' + @cols + N')
        ) p '

exec sp_executesql @query_histogram_3d;

END

三江源!