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.
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


0