繁体   English   中英

select如何将某行的值作为另一个表的列名?

[英]How select a row values to be column names of another table?

我是 SQl 的新手。我想知道我是如何完成这项任务的。 我有一个部门表,我想搜索“数学”是否在表中的任何行或列中。 如果有一行带有“数学”,我想创建一个新表并将整行设置为新表的列名。

在此处输入图像描述

所以我的新表将以“1004”和“Math”作为新列名。

我已经说过这是评论,我要重复一遍,这看起来和听起来像是一个设计缺陷。 当你强迫自己采用动态解决方案时,我怀疑你最终将需要动态 SQL 来查询表,作为 SQL 的新手,这是一个致命的错误; 您很可能会在您的系统中实施(大)安全漏洞。

但是,是的,你可以这样做。 但是请注意,这是未经测试的并且是伪 SQL,因为您没有定义表名的来源,也没有定义列的数据类型。 因此你需要完成这个,但它应该让你走上正确的道路:

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = NCHAR(13) + NCHAR(10);

SET @SQL = N'CREATE TABLE dbo.' + QUOTENAME({Your Table name}) + N' (' + @CRLF +
           (SELECT N'    ' + QUOTENAME(DepartmentID) + {Required Data Type} + N',' + @CRLF +
                   N'    ' + QUOTENAME(DepartmentName) + {Required Data Type} + N'' + @CRLF +
                   N');'
            FROM dbo.YourTable
            WHERE DepartmentID = 1004);

--PRINT @SQL; --Your debugging best friend
EXEC sys.sp_executesql @SQL;

如果您遇到困难,请使用您最好的朋友; 理解这一点取决于您,如果您不理解,请不要使用它(但是,我已经多次建议过)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM