如何转置列转置列并隐藏行并隐藏行? [英] How can I transpose column transpose columns and hide rows and hide row?

查看:143
本文介绍了如何转置列转置列并隐藏行并隐藏行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:



 选择 
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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆