Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

pivotear una columna de query

Estas en el tema de pivotear una columna de query en el foro de SQL Server en Foros del Web. hola amigos, tengo rato dándole vuelta a esto. estoy tratando de pivotear solo una columna de una consulta compuesta por otras consultas en SQLServer 2005 ...
  #1 (permalink)  
Antiguo 21/03/2019, 09:28
 
Fecha de Ingreso: octubre-2007
Ubicación: VEVLN
Mensajes: 223
Antigüedad: 16 años, 6 meses
Puntos: 0
pivotear una columna de query

hola amigos, tengo rato dándole vuelta a esto. estoy tratando de pivotear solo una columna de una consulta compuesta por otras consultas en SQLServer 2005

Tengo las Tablas Ventas_web, Ventas_presenciales y CuentasXCobrar

y la Query :

Código:
SELECT CC.PERIODO,
		CC.ID,
		CC.FACTURA,
		CC.FECHA,
		CC.MONTO,
		Q.FECHA_PAGO,
		Q.METODO,
		MIN(ABS(DATEDIFF(DAY,CC.FECHA, Q.FECHA_PAGO))) AS DIAS_PAGO
FROM CuentasXCobrar CC
LEFT JOIN (  SELECT PERIODO, ID, MONTO, FECHA, 'WEB' AS METODO
                       FROM  Tablas Ventas_web
                       UNION  PERIODO, ID, MONTO, FECHA, 'ATC' AS METODO
                        FROM Ventas_presenciales
                     ) Q ON CC.ID = Q.ID AND CC.PERIODO = Q.PERIODO
El resultado es el siguiente:

| PERIODO | ID | FACTURA | FECHA | MONTO | PAGO | METODO | DIAS_PAGO |
---------------------------------------------------------------------------------------------------------------------------------------
| 201902 | 490 | 160175 | 2019-02-14 | 5,228 | 2019-02-28 | WEB | 14 |
| 201902 | 490 | 160175 | 2019-02-14 | 5,233 | 2019-02-28 | ATC | 14 |
| 201902 | 1402 | 241286 | 2019-02-21 | 5,491 | 2019-02-26 | ATC | 5 |
| 201902 | 4031 | 165041 | 2019-02-21 | 4,345 | 2019-02-26 | ATC | 5 |
| 201902 | 1415 | 650418 | 2019-02-18 | 4,345 | 2019-02-20 | ATC | 2 |
| 201902 | 1415 | 650418 | 2019-02-18 | 5,228 | 2019-02-19 | ATC | 1 |
---------------------------------------------------------------------------------------------------------------------------------------

Necesito que los clientes que hicieron más de 1 abono en el mismo periodo se muestren como 1 sola linea, y el monto se muestre en 2 columnas, siendo el método y día de pago referencial el más cercano a cero :

|PERIODO | ID | FACTURA | FECHA | MONTO | MONTO_2 | PAGO | METODO|DIAS_PAGO|
-------------------------------------------------------------------------------------------------------------------
|201902 | 490 | 160175 | 2019-02-14 | 5,228 | 5,233 | 2019-02-28 | WEB | 14 |
|201902 | 1402 | 241286 | 2019-02-21 | 5,491 | 0.00 | 2019-02-26 | ATC | 5 |
|201902 | 4031 | 165041 | 2019-02-21 | 4,345 | 0.00 | 2019-02-26 | ATC | 5 |
|201902 | 1415 | 650418 | 2019-02-18 | 4,345 | 5,228 | 2019-02-20 | ATC | 1 |
------------------------------------------------------------------------------------------------------------

je dado varias vueltas y no he visto forma de solucionarlo, necesito hacer sin usar tablas temporales.

Última edición por dorvax; 21/03/2019 a las 15:00 Razón: acentos
  #2 (permalink)  
Antiguo 22/03/2019, 10:26
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: pivotear una columna de query

De estos 2

| 201902 | 490 | 160175 | 2019-02-14 | 5,228 | 2019-02-28 | WEB | 14 |
| 201902 | 490 | 160175 | 2019-02-14 | 5,233 | 2019-02-28 | ATC | 14 |

sacas 1 registro

|201902 | 490 | 160175 | 2019-02-14 | 5,228 | 5,233 | 2019-02-28 | WEB | 14 |

Eso lo entiendo, pero porque los 2 estan englobados en el mismo modo de pago? porque eso que quieres hacer no es un pivote, mas bien es presentar los datos de manera diferente y lo podrias hacer haciendo un join a la misma tabla algo asi

Código SQL:
Ver original
  1. SELECT t1.monto AS monto1, t2.monto AS monto2 FROM tabla AS t1
  2. INNER JOIN tabla AS t2 ON (t1.id=t2.id)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: query
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:41.