SQL - pivotear solo una columna

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 15 puestos en SQL (en relación al último mes)
Gráfica de SQL

pivotear solo una columna

Publicado por FT (2 intervenciones) el 21/03/2019 16:04:03
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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 | 2019-02-26 | ATC | 5 |
|201902 | 4031 | 165041 | 2019-02-21 | 4,345 | 0 | 2019-02-26 | ATC | 5 |
|201902 | 1415 | 650418 | 2019-02-18 | 4,345 | 5,228 | 2019-02-20 | ATC | 1 |
-----------------------------------------------------------------------------------------------------------------------------------------------------


Mi problema radica en el hecho que no puedo usar una tabla temporal para realizar esta acción.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vega A S
Val: 202
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

pivotear solo una columna

Publicado por Vega A S (62 intervenciones) el 21/03/2019 18:02:52
¿Qué motor estas usando?
¿Podrías ponder in ejemplo de los registros en Tablas y ventas presidenciales?
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

pivotear solo una columna

Publicado por FT (2 intervenciones) el 21/03/2019 18:20:51
Al inicio de mi post indico el motor SQLSERVER 2005 Y la primera tabla muestra el resultado del query sobre el cual se debe aplicar el pivot
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco
Val: 101
Ha disminuido 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

pivotear solo una columna

Publicado por Francisco (33 intervenciones) el 22/04/2019 15:43:32
Hola

Esto puede servir de guia


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
WITH q AS(
 
   SELECT periodo, id, monto, fecha, 'WEB' AS metodo FROM  Tablas Ventas_web
   UNION
   SELECT periodo, id, monto, fecha, 'ATC' AS metodo FROM  Ventas_presenciales
 
),
tcc AS (
SELECT
   row_number() OVER (ORDER BY cc.periodo, cc.id, cc.factura, cc.fecha) AS seq,
   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 q ON cc.periodo = q.periodo AND cc.id = q.id
)
SELECT
   cc.periodo,
   cc.id,
   cc.factura,
   cc.fecha,
   cc.monto,
   ISNULL((SELECT monto FROM ttc AS temp
      WHERE tcc.seq > 1
         AND temp.periodo = tcc.periodo
         AND temp.id = tcc.id
         AND temp.factura
         AND temp.fecha = tcc.fecha), 0) AS monto_2,
   q.fecha_pago,
   q.metodo,
   dias_pago
FROM tcc WHERE tcc.seq=1

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar