如何转置列转置列并隐藏行并隐藏行? [英] How can I transpose column transpose columns and hide rows and hide row?
本文介绍了如何转置列转置列并隐藏行并隐藏行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的代码:
选择
ccc.Descripcion AS Grado,
p.CodPersona AS Codigo,
p .NombreCompleto AS Nombre,
cc.Detalle AS Detalle,
SUM(cc .Valor) AS Valor
来自 Cuenta cc
inner join AlumnoDB.dbo.Alumno on cc .IdAlumno = a.CodAlumno
inner join AlumnoDB.dbo.Matricula m cc.IdAlumno = m.CodAlumno
inner join AlumnoDB.dbo.Curso ccc on m.CodCurso = ccc.Co dCurso
inner join AlumnoDB.dbo.Persona p on a.CodPersona = p.CodPersona
其中 cc.Detalle 是 不 null
和 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
(结果是gro最多12条记录,N条记录的详细信息只有3条(折扣,每月和注册)类型)我希望折扣和月付款保持为栏目和发票隐藏。
现在我展示它:
Grado Codigo nombre Descuento Mensualidad
Tercero 4664 Angie 250.00 5000.00
我的尝试:
< pre lang =SQL>选择
ccc.Descripcion AS Grado,
p.CodPersona AS Codigo,
p.NombreCompleto AS Nombre,
cc.Detalle AS Detalle,
SUM(cc.Valor)AS Valor
来自Cuenta cc
内部加入AlumnoDB.dbo.Alumno a on cc.IdAlumno = a.CodAlumno
内连接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
其中cc.Detalle不是null
和cc.Valor!= 0.00
由cc.Detalle组成,
ccc.Descripcion,
p.CodPersona,
p.NombreCompleto
解决方案
您可以使用PIVOT功能。以下是 SQL PIVOT Rows to Columns - Stack Exchange Data Explorer 的示例[ ^ ]
DECLARE @ test TABLE (
Grado VARCHAR ( 50 ),
Codigo VARCHAR ( 50 ),
Nombre VARCHAR ( 50 ),
Detalle VARCHAR ( 50 ),
Valor VARCHAR ( 50 )
)
INSER T INTO @ test
SELECT ' Tercero',' 4664',' Angie' ,' Descuento',' - 250.00'
UNION
SELECT ' Tercero',' 4664',' Angie',< span class =code-string>' Mensualidad',' 5000.00'
UNION
SELECT ' < span class =code-string> Tercero',' 4664',' Angie',' Fact',' - 875.00';
- SELECT Detalle,Codigo,Valor FROM @test
选择 Grado,Codigo,Nombre,Descuento,Mensualidad
来自
(
选择 Grado,Codigo,Nombre,Valor,Detalle
来自 @ test
)d
pivot
(
max(Valor)
for Detalle in (Descuento,Mensualidad)
)piv;
输出:
Grado Codigo Nombre Descuento Mensualidad
Tercero 4664 Angie -250.00 5000.00
this is my code:
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
this is result:
Grado Codigo Nombre Detalle Valor Tercero 4664 Angie Descuento -250.00 Tercero 4664 Angie Mensualidad 5000.00 Tercero 4664 Angie Fact -875.00
(that result the grouping of 12 records, and there will only be 3 (Discount, monthly and registration) types of details for N records) I want that Discount and monthly payment remain as column and invoice is hidden.
now as I show it:
Grado Codigo nombre Descuento Mensualidad Tercero 4664 Angie 250.00 5000.00
What I have tried:
<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
解决方案
You can use PIVOT function. Here is an example SQL PIVOT Rows to Columns - Stack Exchange Data Explorer[^]
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;
Output:
Grado Codigo Nombre Descuento Mensualidad Tercero 4664 Angie -250.00 5000.00
这篇关于如何转置列转置列并隐藏行并隐藏行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文