Rodrigo Alex Rodriguez Ответов: 1

Как я могу транспонировать столбец транспонировать столбцы и скрыть строки и скрыть строку?


это мой код:

select	
		ccc.Descripcion AS Grado,
		p.CodPersona AS Codigo,
		p.NombreCompleto AS Nombre,
		cc.Detalle AS Detalle,
		SUM(cc.Valor) AS Valor

from Cuenta cc
		inner join AlumnoDB.dbo.Alumno a on cc.IdAlumno = a.CodAlumno
		inner join AlumnoDB.dbo.Matricula m on cc.IdAlumno = m.CodAlumno
		inner join AlumnoDB.dbo.Curso ccc on m.CodCurso = ccc.CodCurso
		inner join AlumnoDB.dbo.Persona p on a.CodPersona = p.CodPersona

		where cc.Detalle is not null
		and cc.Valor != 0.00

		group by cc.Detalle, 
			ccc.Descripcion, 
			p.CodPersona,
			p.NombreCompleto


это результат:

Grado    Codigo  Nombre   Detalle        Valor
Tercero	  4664    Angie	  Descuento     -250.00
Tercero	  4664	  Angie	  Mensualidad	5000.00
Tercero	  4664    Angie	  Fact	        -875.00



(в результате получается группировка из 12 записей, и для N записей будет только 3 типа реквизитов (дисконтный, ежемесячный и регистрационный).) Я хочу, чтобы скидка и ежемесячный платеж оставались в виде столбца, а счет-фактура был скрыт.

теперь как я покажу:

Grado     Codigo   nombre   Descuento  Mensualidad 
Tercero   4664	   Angie    250.00     5000.00


Что я уже пробовал:

<pre lang="SQL">select	
		ccc.Descripcion AS Grado,
		p.CodPersona AS Codigo,
		p.NombreCompleto AS Nombre,
		cc.Detalle AS Detalle,
		SUM(cc.Valor) AS Valor

from Cuenta cc
		inner join AlumnoDB.dbo.Alumno a on cc.IdAlumno = a.CodAlumno
		inner join AlumnoDB.dbo.Matricula m on cc.IdAlumno = m.CodAlumno
		inner join AlumnoDB.dbo.Curso ccc on m.CodCurso = ccc.CodCurso
		inner join AlumnoDB.dbo.Persona p on a.CodPersona = p.CodPersona

		where cc.Detalle is not null
		and cc.Valor != 0.00

		group by cc.Detalle, 
			ccc.Descripcion, 
			p.CodPersona,
			p.NombreCompleto

1 Ответов

Рейтинг:
10

Bryian Tan

Вы можете использовать функцию PIVOT. Вот пример В SQL разворота строк в Столбцы - стек обмена данных[^]

DECLARE @test TABLE (
    Grado VARCHAR(50),
    Codigo VARCHAR(50),
    Nombre VARCHAR(50),
    Detalle VARCHAR(50),
    Valor VARCHAR(50)
)

INSERT INTO @test
    SELECT 'Tercero','4664','Angie','Descuento','-250.00'
    UNION
    SELECT 'Tercero','4664','Angie','Mensualidad','5000.00'
    UNION
    SELECT 'Tercero','4664','Angie','Fact','-875.00';

--SELECT Detalle,Codigo, Valor FROM @test

select Grado, Codigo, Nombre, Descuento, Mensualidad
from
(
  select Grado, Codigo,Nombre, Valor, Detalle
  from @test
) d
pivot
(
  max(Valor)
  for Detalle in (Descuento, Mensualidad)
) piv;


Выход:
Grado	Codigo	Nombre	Descuento	Mensualidad
Tercero	4664	Angie	-250.00	        5000.00