当前位置: 首页 > 面试题库 >

在SQL中动态更改列名

束向荣
2023-03-14
问题内容

我有这样的查询结果:

Date       User1 User2 User3 ....
----------------------------------
1/1/2000   55     78    98   ...
1/1/2001   26     33    56   ...
1/1/2002   88     67    12   ...

列数未知,因为它是数据透视查询的结果。

我想将列的名称更改为如下所示:

Date    User1 (blue)  User2 (green)  User3(brown)

颜色是我从另一个表中检索到的信息。

我怎样才能做到这一点?

谢谢

编辑:这是查询。

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(C.Name)  
                    from [History]



            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
set @query = 'SELECT [Date],' + @cols +' 
             from 
             (
                select [Date], Name, Value
                from [History]


             ) x
            pivot 
            (
                max(value)
                for Name in (' + @cols + ')
            ) p '

execute(@query)

问题答案:

模式设置

create table history (date datetime, name varchar(10), value int);
insert history values
 ('20130101', 'user1', 123),
 ('20130101', 'user2', 124),
 ('20130101', 'user3', 125),
 ('20130102', 'user1', 223),
 ('20130102', 'user3', 223),
 ('20130103', 'user2', 323);

create table colours (name varchar(10), colour_name varchar(10));
insert colours values
 ('user1', 'blue'),
 ('user2', 'green'),
 ('user3', 'brown');

查询

DECLARE @scols nvarchar(max),
        @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX);

select @cols = STUFF((
  SELECT ',' + QUOTENAME(C.Name)  
  from (select distinct name from [History]) C
  ORDER BY C.Name
  FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'');

select @scols = STUFF((
  SELECT ',' + QUOTENAME(Name) + ' AS ' + QUOTENAME(colour_Name)  
  from (select distinct c.name, x.colour_name
        from [History] C
        JOIN colours x on x.name = c.name) y
  ORDER BY Name
  FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'');

set @query = '
    SELECT [Date],' + @scols +' 
    from (
        select [Date], Name, Value
        from [History]
         ) x
    pivot 
         (
        max(value)
        for Name in (' + @cols + ')
         ) p ';

-- print @query --<< uncomment this line to see the query that gets generated
exec (@query);






|                           DATE |   BLUE |  GREEN |  BROWN |
-------------------------------------------------------------
| January, 01 2013 00:00:00+0000 |    123 |    124 |    125 |
| January, 02 2013 00:00:00+0000 |    223 | (null) |    223 |
| January, 03 2013 00:00:00+0000 | (null) |    323 | (null) |


 类似资料:
  • 问题内容: 我有以下查询,该查询返回,商店编号及其区域以及2016年商店销售额的总和。 我将如何添加第四列,以总结每个商店所在区域的销售额。 每个区域有许多存储,因此,在相同区域中具有存储的每个ROW上,该值将相同。 希望我能解释清楚吗? 问题答案: 您可以使用窗口功能:

  • 问题内容: 这个问题已经在这里有了答案 : 我可以使用PDO准备好的语句来绑定标识符(表或字段名)或语法关键字吗? (1个答案) 去年关闭。 是否可以在准备好的MySQL语句中将列名作为参数传递?请看以下示例: PDO 在每个参数周围添加,因此上面的中线变为: 哪个MySQL不喜欢。有没有一种方法可以在PDO语句中包含字段名的参数,并接受它们? 否则,我猜我将不得不编写一些不同的PDO语句,具体取

  • 问题内容: 我正在从数据库中成功获取数据值。我也将它们存储到一个数组中。我需要将String数组作为项的加载,以响应执行的关键操作。每当获取按键值时,如何获取按键值,就如何重新加载项目。相反,我需要动态刷新项目。 问题答案:

  • 问题内容: 我有一个包含3列的表,表头中具有以下值:“编号”,“ X [mm]”,“ Y [mm]”。该表包含以毫米为单位的点的坐标。我有一个复选框,用于检查应重新填充哪些表格以以英寸为单位显示坐标。此外,列标题值应为:“ No。”,“ X [in]”,“ Y [in]”。 简而言之,我想动态更改表格的标题文本。 详细信息:该表是JTable的子类。此外,已将“ DefaultTableModel

  • 问题内容: 目前,我正在Spring Boot中基于​​REST的项目上工作。我在“ application.properties”文件中添加了api网址。 即 application.properties 以及来自Java的“ api-base-url”值访问。 在某些情况下,我需要动态更改“ api-base-url”。我已经动态更改了’api-base-url’的值并且可以正常工作。 但是我

  • 问题内容: 我的问题是:如何更改标签中的文本?标签在布局内,但似乎不起作用-也许我做对了。 这是我的代码: 这是Main Windows GUI,一个Qt-Designer提供: 这是接口的逻辑: 我想在用户登录到程序后更改标签。我要更改的标签是,我想将其替换为,它对应于QLineEdits之一。 更新 我进行了您告诉我要做的所有更改,该项目看起来看起来井井有条,但是现在我得到了以下输出: Typ