Quote Originariamente inviata da mau79 Visualizza il messaggio
Ciao a tutti,

ho una query che estrae i seguenti dati in questo modo:

ID Persona 1 Persona 2 Persona 3 Persona 4
11 Pinco Pallino Pinco Pallino3
11 Pinco Pallino2 Pinco Pallino4

Io vorrei poter avere una tabella così:

ID Persona
11 Pinco Pallino
11 Pinco Pallino2
11 Pinco Pallino 3
11 Pinco Pallino 4

È fattibile a livello di query/store procedure in MS SQL Server?

Ciao e grazie

Mau

codice:
USE tempdb
go


if OBJECT_ID('[dbo].[T1]') is not null drop  table [dbo].[T1]
go


CREATE TABLE [dbo].[T1]
(
 [ID] [int] NULL,
 [Pers1] [nvarchar](50) NULL,
 [Pers2] [nvarchar](50) NULL,
 [Pers3] [nvarchar](50) NULL,
 [Pers4] [nvarchar](50) NULL
) ON [PRIMARY]
GO


insert into [dbo].[T1] ( [ID], [Pers1], [Pers2], [Pers3], [Pers4] )
values(11,'Pers11',null,null,'Pers14')
insert into [dbo].[T1] ( [ID], [Pers1], [Pers2], [Pers3], [Pers4] )
values(11,null,'Pers22',null,'Pers24')

-- la query che cerchi

select qq.* from
( 
    select 
       T1.id
      ,case q.N
           when 1 then t1.pers1 
           when 2 then t1.pers2 
           when 3 then t1.pers3 
           when 4 then t1.pers4 
       end as Pers
    from 
    T1 cross join
    (
        select 1 as N
        union all
        select 2
        union all
        select 3
        union all
        select 4
    ) as q
) as qq
where qq.Pers is not null