SQL-将单元格/行输出附加到现有列名

SQL-将单元格/行输出附加到现有列名,sql,sql-server,Sql,Sql Server,我不确定这是否确实可行,但我正在寻找一种方法,从一行(一行表)中获取一个值,并将其附加到MS SQL Server中另一列的名称中 例如: 表A: [Document Count], [File Size] ------------------------- 50, 100 GB 结果: [Document Count (100 GB)] ------------------------ 50 如您所见,我正在将行值添加到另一列的标题名称中 我有几个专栏我想用一种自动化的

我不确定这是否确实可行,但我正在寻找一种方法,从一行(一行表)中获取一个值,并将其附加到MS SQL Server中另一列的名称中

例如:

表A:

  [Document Count], [File Size]
    -------------------------
    50, 100 GB
结果:

[Document Count (100 GB)]
------------------------
50
如您所见,我正在将行值添加到另一列的标题名称中

我有几个专栏我想用一种自动化的方式来做这件事,所以我尽量避免每次都要把它打印出来

我感谢你的帮助

DECLARE @t1 nvarchar(255), @cname nvarchar(255), @sqlcom nvarchar(2000), @s nvarchar(255)
select @cname = c.name from sys.columns c where c.object_id = object_id('table_A','U') and c.name like '%document_count%';
select @t1 = [filesize] from table_A;
set @s = '['+@cname+'_'+@t1+']';
set @sqlcom = 'select document_count as '+@s+' from table_A;'
exec (@sqlcom);
正如您所提到的,表中有多个列,在这种情况下,您可以使用此过程从所有其他列(所需的-“document_count”除外)中提取值并连接到第一个列名。检查以下各项:

create table table_A
(
    document_count int,
    filesize varchar(50)
);
GO

insert table_A values(50,'100 GB');
GO

CREATE PROCEDURE dbo.colnamegen (
/*
DECLARE @outparam NVARCHAR(255)
EXEC dbo.colnamegen 'table_A','%document_count%',@ColumnValues = @outparam OUTPUT;
*/
    @tablename NVARCHAR(255),
    @columnname NVARCHAR(255),
    @ColumnValues NVARCHAR(255) OUTPUT)
AS
BEGIN

DECLARE 
        @colname NVARCHAR(25),
        @AllColList NVARCHAR(255),
        @tmpstr NVARCHAR(255),
        @SqlCommand NVARCHAR(2500),
        @collist NVARCHAR(1000),
        @dynsql NVARCHAR(2500)

-- extracting column name '%document_count%'
SELECT @colname = c.name FROM sys.columns c WHERE c.object_id = OBJECT_ID(@tablename,'U') AND name like @columnname;

--A temperory string for removing the first column from all column list.
SET @tmpstr = ' + ISNULL( '+QUOTENAME(@colname)+' ,'' '') + ';

-- column list
SELECT @collist = SUBSTRING((select ', '+QUOTENAME(c.name)
                                FROM sys.columns c
                                WHERE c.object_id = OBJECT_ID('table_A')--(@tablename)
                                FOR XML PATH('')),3, 1000);

-- A list of all columns in the table excluding the first column
-- which will used in dynamic query to perform concatenation of all the values of all
-- columns of table.
SELECT @AllColList = REPLACE((select ' + ISNULL( ' + QUOTENAME(c.name) + ' ,'' '')'
                                FROM sys.columns c
                                WHERE c.object_id = OBJECT_ID(@tablename)
                                FOR XML PATH('')),@tmpstr,'');

--values from all the columns are concatenatied and assigned to a variable
SET @SqlCommand = '
        SELECT @ColumnValues = a.newcol 
        FROM(
            SELECT '+@AllColList+' AS newcol FROM '+@tablename+
            ')a;'

EXEC sp_executesql @SqlCommand, N'@ColumnValues nvarchar(255) OUTPUT', @ColumnValues = @ColumnValues OUTPUT;

--subsequent and final query for desired output
SET @dynsql = 'SELECT '+@collist+', '+@colname+' AS '+'['+@colname+@ColumnValues+']'+' FROM '+@tablename+';'
EXEC (@dynsql);
END;
GO

DECLARE @outparam NVARCHAR(255)
EXEC dbo.colnamegen 'table_A','%document_count%',@ColumnValues = @outparam OUTPUT;
GO

您可以尝试以下操作:

DECLARE @cols AS VARCHAR(MAX), @query AS VARCHAR(MAX);

SET @cols = STUFF((select distinct ', 
            MAX(CASE WHEN [Document Count]=''' + CAST([Document Count] as varchar(10)) + ''' THEN [Document Count] ELSE 0 END) AS [Document Count ' + CAST([File Size] as varchar(10)) +']'
                        /*---------------------------------you can add other columns similar to the above here----------------------------------*/
            FROM #t 
            FOR XML PATH(''),type).value('.','varchar(max)'),1,2,'')

exec ('SELECT [Document Count], [File Size], ' + @Cols +'  FROM #t group by [Document Count], [File Size]')
请找到DBFIDLE