SQL - Partition BY con un Alias

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

Partition BY con un Alias

Publicado por Franz (9 intervenciones) el 15/12/2021 01:02:53
Hola otra vez.

Alguien me podria orientar por favor sobre como puedo meter el alias de una columna dentro de un partition by. Me parece ese es el problema que tengo.
SQL 2012 SP2 solo muestra invalid column name Lineas2.
No puedo meter dentro de partition by la columna job ya que a veces es NULL entonces de otra columna concateno la información para poder crear Líneas con el mismo nombre, y al final quisiera agruparlas para obtener el valor mas reciente y cruzarlo con otra tabla de Líneas.

Este es el codigo
;WITH TRX AS
(
SELECT * FROM
(
SELECT
CASE WHEN (job IS NULL) THEN
CASE
WHEN SUBSTRING(emp_num,1,5) = 'INY00' THEN CONCAT('L', CONVERT(INT,SUBSTRING(emp_num,4,4)))
WHEN SUBSTRING(emp_num,1,3) = 'INY' THEN CONCAT('L', CONVERT(INT,SUBSTRING(emp_num,4,2)))
WHEN SUBSTRING(emp_num,1,3) = 'IMP' THEN CONCAT('MOS', CONVERT(INT,SUBSTRING(emp_num,4,2)))
WHEN SUBSTRING(emp_num,1,2) = 'SF' THEN CONCAT(SUBSTRING(emp_num,1,2), CONVERT(INT,SUBSTRING(emp_num,3,2)))
WHEN SUBSTRING(emp_num,1,3) = 'ENS' THEN SUBSTRING(emp_num,1,3)
WHEN SUBSTRING(emp_num,1,3) = 'S&F' THEN CONCAT(SUBSTRING(emp_num,1,1),SUBSTRING(emp_num,3,1), CONVERT(INT,SUBSTRING(emp_num,4,2)))
ELSE CONCAT(SUBSTRING(emp_num,1,3), CONVERT(INT,SUBSTRING(emp_num,4,2)))
END
ELSE (SUBSTRING(job,1,CHARINDEX('-',job)-1)) END as Lineas2,

ROW_NUMBER() OVER (PARTITION BY [Lineas2] order by CreateDate
) AS RN
FROM jobtrans) x where RN = 1
)

Necesito obtener algo como esto:

Es una tabla con el numero de Línea y su ultimo tipo de registro. (R= Run, I= Indirect, S= Setup)
L1 - R
L2 - R
L3 - I
L4 - R
ENS - S
MOS1 - S
SF1 - R

Gracias de antemano por su tiempo.
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 Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Partition BY con un Alias

Publicado por Isaias (1921 intervenciones) el 15/12/2021 15:52:03
Checa este ejemplo:
1
2
3
4
5
6
SELECT Name, billsum, ROW_NUMBER() OVER (ORDER BY billsum DESC) AS rn
FROM
  ( SELECT Sales.Name, SUM(Sales.Bill) AS billsum
    FROM Sales
    GROUP BY Sales.Name
  ) tmp
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
sin imagen de perfil
Val: 1
Ha disminuido su posición en 42 puestos en SQL (en relación al último mes)
Gráfica de SQL

Partition BY con un Alias

Publicado por Franz (9 intervenciones) el 15/12/2021 17:16:33
Muchas gracias por el ejemplo. Me parece esta muy cerca de quedar. Solo me faltaría filtrar por RN = 1 pero he puesto el Where RN = 1 en varios lados y no identifica a RN. Dice column RN invalid.

SELECT createdate, trans_type,
CASE WHEN (job IS NULL) THEN
CASE
WHEN SUBSTRING(emp_num,1,5) = 'INY00' THEN CONCAT('L', CONVERT(INT,SUBSTRING(emp_num,4,4)))
WHEN SUBSTRING(emp_num,1,3) = 'INY' THEN CONCAT('L', CONVERT(INT,SUBSTRING(emp_num,4,2)))
WHEN SUBSTRING(emp_num,1,3) = 'IMP' THEN CONCAT('MOS', CONVERT(INT,SUBSTRING(emp_num,4,2)))
WHEN SUBSTRING(emp_num,1,2) = 'SF' THEN CONCAT(SUBSTRING(emp_num,1,2), CONVERT(INT,SUBSTRING(emp_num,3,2)))
WHEN SUBSTRING(emp_num,1,3) = 'ENS' THEN SUBSTRING(emp_num,1,3)
WHEN SUBSTRING(emp_num,1,3) = 'S&F' THEN CONCAT(SUBSTRING(emp_num,1,1),SUBSTRING(emp_num,3,1), CONVERT(INT,SUBSTRING(emp_num,4,2)))
ELSE CONCAT(SUBSTRING(emp_num,1,3), CONVERT(INT,SUBSTRING(emp_num,4,2)))
END
ELSE (SUBSTRING(job,1,CHARINDEX('-',job)-1)) END as Lineas,
ROW_NUMBER() OVER (PARTITION BY [Lineas2] order by createdate DESC) AS RN
FROM
(
SELECT JT.trans_type, JT.emp_num, JT.job, JT.CreateDate,
CASE WHEN (JT.job IS NULL) THEN
CASE
WHEN SUBSTRING(JT.emp_num,1,5) = 'INY00' THEN CONCAT('L', CONVERT(INT,SUBSTRING(JT.emp_num,4,4)))
WHEN SUBSTRING(JT.emp_num,1,3) = 'INY' THEN CONCAT('L', CONVERT(INT,SUBSTRING(JT.emp_num,4,2)))
WHEN SUBSTRING(JT.emp_num,1,3) = 'IMP' THEN CONCAT('MOS', CONVERT(INT,SUBSTRING(JT.emp_num,4,2)))
WHEN SUBSTRING(JT.emp_num,1,2) = 'SF' THEN CONCAT(SUBSTRING(JT.emp_num,1,2), CONVERT(INT,SUBSTRING(JT.emp_num,3,2)))
WHEN SUBSTRING(JT.emp_num,1,3) = 'ENS' THEN SUBSTRING(JT.emp_num,1,3)
WHEN SUBSTRING(JT.emp_num,1,3) = 'S&F' THEN CONCAT(SUBSTRING(JT.emp_num,1,1),SUBSTRING(JT.emp_num,3,1), CONVERT(INT,SUBSTRING(JT.emp_num,4,2)))
ELSE CONCAT(SUBSTRING(JT.emp_num,1,3), CONVERT(INT,SUBSTRING(JT.emp_num,4,2)))
END
ELSE (SUBSTRING(JT.job,1,CHARINDEX('-',JT.job)-1)) END as Lineas2
FROM [CORVAGLIA_Prod_App].[dbo].[jobtran_mst] JT

) TMP
-- WHERE TMP.RN = 1
GROUP BY TMP.Lineas2, TMP.CreateDate,TMP.emp_num, TMP.job,TMP.trans_type
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 Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Partition BY con un Alias

Publicado por Isaias (1921 intervenciones) el 15/12/2021 21:58:17
¿Y estos si los reconoce?

GROUP BY TMP.Lineas2, TMP.CreateDate,TMP.emp_num, TMP.job,TMP.trans_type
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
sin imagen de perfil
Val: 1
Ha disminuido su posición en 42 puestos en SQL (en relación al último mes)
Gráfica de SQL

Partition BY con un Alias

Publicado por Franz (9 intervenciones) el 15/12/2021 22:59:16
Si, si lo reconoce.

Me mostró una tabla asi:

RN-- LINEA -- TIPO
1 -- ENS -- I
2 -- ENS -- R
3 -- ENS -- R
1 -- L1 -- R
2 -- L1 -- R
1 -- L2 -- R
1 -- L3 -- S
2 -- L3 -- I
3 -- L3 -- R


Si logrará filtrar RN = 1
, ya tendria el resultado que busco, y sin cruzar tablas
.

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