Estoy usando SQL Server 2014 y tengo la siguiente consulta T-SQL que se supone que calcula la diferencia en los ingresos totales en función de 2 períodos específicos. Los datos para realizar el cálculo provienen de una sola tabla SQL.

Para resumir, tengo una columna en la tabla T1 llamada Revenue y otra columna llamada Month. Necesito encontrar la diferencia en ingresos para los meses de septiembre de 2020 a diciembre de 2020 en comparación con septiembre de 2019 a diciembre de 2019.

Mi consulta T-SQL es la siguiente:

USE [MyDatabase]

;with cte1 as 
(
  SELECT 
    sum ([Revenue]) as 'Revenue Sep 19 - Dec 19'
  FROM
    [T1]
  WHERE
    [Month] between '2019-09-01' and '2019-12-01'
),
cte2 as (
  SELECT
    sum ([Revenue]) as 'Revenue Sep 20 - Dec 20'
  FROM
    [T1]
  WHERE
    [Month] between '2020-09-01' and '2020-12-01'
),
cte3 as (
  SELECT 
    cte2.[Revenue Sep 20 - Dec 20] as 'Total Revenue',
    'Sep 20 - Dec 20' as 'Period',
    '1' as 'ID'
  FROM
    [cte2]

  UNION ALL 

  SELECT 
    cte1.[Revenue Sep 19 - Dec 19] as 'Total Revenue',
    'Sep 19 - Dec 19' as 'Period',
    '1' as 'ID'
  FROM
    [cte1]
)
select a.[Total Revenue] - b.[Total Revenue]
from
  (select cte3.[Total Revenue] from [cte3] where cte3.[Period] = 'Sep 20 - Dec 20') a
  JOIN
  (select cte3.[Total Revenue] from [cte3] where cte3.[Period] = 'Sep 19 - Dec 19') b
  ON b.[ID] = a.[ID]

He basado mi consulta en lo siguiente: Cómo calcular entre diferentes grupos de filas de la misma tabla

Sin embargo, cuando ejecuto mi consulta, recibo el siguiente mensaje de error:

Nombre de columna no válido 'ID'.

No puedo entender qué estoy haciendo mal aquí. ¿No está presente la columna ID en el cte3?

0
user3115933 23 may. 2020 a las 09:53

3 respuestas

La mejor respuesta

ID debe estar presente en la lista de selección de a y b para que sea visible para join:

from
  (select cte3.ID, cte3.[Total Revenue] from [cte3] where cte3.[Period] = 'Sep 20 - Dec 20') a
  JOIN
  (select cte3.ID, cte3.[Total Revenue] from [cte3] where cte3.[Period] = 'Sep 19 - Dec 19') b
  ON b.[ID] = a.[ID]
1
GSerg 23 may. 2020 a las 07:18

Al usar SUB QUERY, debe mencionar la columna que menciona en la condición Unirse

SELECT A.[TOTAL REVENUE] - B.[TOTAL REVENUE]
FROM
(SELECT CTE3.[TOTAL REVENUE],CTE3.ID FROM [CTE3] WHERE CTE3.[PERIOD] = 'SEP 20 - DEC 20') A
JOIN
(SELECT CTE3.[TOTAL REVENUE],CTE3.ID FROM [CTE3] WHERE CTE3.[PERIOD] = 'SEP 19 - DEC 19') B ON B.[ID] = A.[ID]
1
Thiyagu 23 may. 2020 a las 07:19

Prueba este código a continuación, te ayudará

USE [MyDatabase]

select sum([Revenue Sep 20 - Dec 20])-sum([Revenue Sep 19 - Dec 19]) as revenue_diffrence 
from
(
SELECT 
    [Revenue] as 'Revenue Sep 19 - Dec 19', 0 as 'Revenue Sep 20 - Dec 20'
  FROM
    [T1]
  WHERE
    [Month] between '2019-09-01' and '2019-12-01'

union all
SELECT
    0 as 'Revenue Sep 19 - Dec 19',[Revenue] as 'Revenue Sep 20 - Dec 20'
  FROM
    [T1]
  WHERE
    [Month] between '2020-09-01' and '2020-12-01'
)a 

1
Soundappan A 23 may. 2020 a las 07:23