返回动态数据的SQL函数

Jan*_*ger 6 sql pivot dynamic

是否可以在MSSQL中使用表值函数来获取属性并使用Pivot函数生成关联的SQL语句?

CREATE FUNCTION dbo.fnPivot (@EntityTypeID int)
RETURNS TABLE
AS
BEGIN
    DECLARE @SQL varchar(MAX);
    DECLARE @COLS varchar(MAX);

    select @COLS=coalesce(@COLS+',','')+'['+Name+']'from c_EntityAttribute WHERE EntityTypeID = @EntityTypeID;

    SET @SQL = 'SELECT * FROM (SELECT EntityInstanceID, AttributeName, Value FROM v_EntityElementData WHERE EntityTypeID = 1) as s';
    SET @SQL = @SQL + 'PIVOT ( MIN(Value) FOR AttributeName IN (' + @COLS + ') ) AS p';

    RETURN EXEC sp_ExecuteSQL @SQL ;
END
Run Code Online (Sandbox Code Playgroud)

Joe*_*ord 6

遗憾的是,除了存储过程外,SQL Server会跟踪所有视图,函数等输出的表定义.因此,列和类型不能在输入上动态更改.

出于这个原因,我从未发现PIVOT算子有用.通常,获取不同列数据的唯一方法是将其视为XML.

你出于什么原因转动它?这通常是一个UI问题,因此我建议在UI或SSRS等处进行.

  • 我做了类似的事情并使用SSRS中的Matrix/Tablix功能在渲染时将其旋转 - 工作非常巧妙 (2认同)
  • 我不同意这是一个UI问题.这就像说所有数据都是UI关注点.RDBS最适合切片和切块数据.否则,您必须通过线路向应用层发送更多信息,以便UI窗口小部件或其他一些可以操纵它.我无法在线上获得50000条记录,因此用户界面可以制作数据透视图. (2认同)