Tengo el resultado de una consulta como esta :

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

El número de columnas no es conocido porque es el resultado de un pivote de consulta.

Me gustaría cambiar el nombre de las columnas a algo que se parece a esto :

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

El color es una información que recuperar de otra tabla.

¿Cómo puedo lograr esto ?

Gracias

Edit : Aquí está la consulta.

  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)
  • Luego muéstrele a su consulta, lo que le da este resultado.
  • ¿De dónde estos valores blue, green, brown vienen? ¿Quieres escribir manualmente para cada nombre de usuario? Si es así, a continuación, la lista de las columnas los nombres manualmente no de forma dinámica, ya que, usted va a escribir los colores de los nombres manualmente después de todo.
  • El número de columnas no es conocido porque es el resultado de un pivote de la consulta. por Favor, nos muestran la consulta.
  • Editado con la consulta
InformationsquelleAutor Oliver | 2013-04-24

3 Comentarios

  1. 1

    SQL Violín

    Esquema De Instalación:

    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');

    Consulta:

    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);

    Resultados:

    |                           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) |
  2. 0
    select Date, User1 as blue,User2 as green,User3 as brown from tableName

    Uso de la consulta como esta.

    Hacer uso de ‘as‘ palabra clave ‘ para cambiar el nombre de la columna.

    • Estas son estáticas, los nombres de columna. OP preguntó específicamente para la dinámica de la col nombres, no sólo cómo cambiar el nombre de ellos
  3. 0

    Para obtener la asignación puede utilizar una tabla de búsqueda de edad columna nombre para la nueva columna de nombre por ejemplo

    CREATE TABLE colname(
      oldname varchar(20),
      newname varchar(20)
    )
    
    insert into colname values ( 'user1','user1 (blue)');
    insert into colname values ( 'user2','user2 (green)');

    a continuación, puede crear una instrucción sql que utiliza esta asignación

    declare @sq varchar(2000)
    set @sq ='select date'
    select @sq = @sq +  ',' + oldname + ' as [' + newname +']' from colname
    set @sq = @sq + 'from ( existing query goes here ) ' 
    select @sq

    cuando el sql en @sq se ve bien puede reemplazar la última seleccione con

    exec ( @sq ) 

    para ejecutar la consulta

Dejar respuesta

Please enter your comment!
Please enter your name here