/ / ¿Cómo hacer una consulta para comparar las ventas de este año con las del año pasado? - sql, sql-server-2012, ventas

¿Cómo hacer una consulta para comparar las ventas de este año con las del año pasado? - sql, sql-server-2012, ventas

Soy relativamente nuevo en SQL y estoy tratando de hacer una consulta simple para ver las ventas de este año en un día versus la misma fecha del año pasado o, idealmente, el mismo día de la semana.

He creado la siguiente consulta que actualmente se basa en un solo día establecido. Necesitaré mover esto para obtener la fecha de hoy realmente, pero pensé que abordaría eso más tarde.

-

Below is the query
-strtrdecode = store location
-dtmtradedate = transaction date
-cursales = sales value
-Target = will contain Targets but i haven"t generated any yet but need to show -the field

¿Alguien podría mostrarme cómo mostrar las cifras de este año y del año pasado en la misma línea para cada tienda?

es decir

liverpool, 01/06/2015, 4000,3000
blackpool, 01/06/2015, 6000, 7500 etc..

Gracias de antemano

Micro

TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME  COLUMN_NAME
> DRSData   dbo DAILYSALES  STRSALETYPE
> DRSData   dbo DAILYSALES  STRTRADECODE
> DRSData   dbo DAILYSALES  CURSALES
> DRSData   dbo DAILYSALES  DTMTRADEDATE
> DRSData   dbo DAILYSALES  INTTRANSNUM



*SELECT        strtradecode, dtmtradedate, sum(cursales) as [Actual SALES TY], "" as Target
FROM            DAILYSALES
where (STRSALETYPE = "H" )and (DTMTRADEDATE BETWEEN CONVERT(DATETIME, "2015-06-01 00:00:00", 102) AND CONVERT(DATETIME, "2015-06-01 00:00:00",
102))
group by strtradecode, dtmtradedate*

Respuestas

0 para la respuesta № 1

De acuerdo, tengan paciencia conmigo, ya que este es mi primer intento de respuesta y también soy muy nuevo en SQL.

Estoy intentando aprender, pero quiero obtener másinvolucrado aquí. Estoy seguro de que esta no es la manera más eficiente de realizar lo que quieres hacer, pero como dije, soy muy nuevo y esta es la única manera que sé. Estoy completamente abierto a las correcciones y la ayuda. ¡Gracias!

-- 1. Began by declaring the dates.
-- 2. Then created a temp table.
-- 3. Inserted into the temp table
-- 4. Created JOINS to separate the dates you wanted.
-- 5. SELECTED fields from the temp table for the desired output.

-- Step 1

DECLARE  @startDate1   DATETIME2 = "01/01/2014", -- Creating previous year
@endDate1     DATETIME2 = "12/31/2014", -- Creating previous year
@startDate2   DATETIME2 = "01/01/2015", -- Creating this year
@endDate2     DATETIME2 = "12/31/2015"; -- Creating this year
-- Step 2

DECLARE @yearFigures TABLE (    -- Created temp table with your desired output
StoreLocation VARCHAR(20),
TransactionDt VARCHAR(10),
PreviousYear VARCHAR(20),
CurrentYear VARCHAR(20))

-- Step 3

INSERT INTO @yearFigures        -- Inserting into your temp table
SELECT DISTINCT
strtrdecode,
CONVERT( VARCHAR(10), dtmtradedate, 101),
sales1.cs1,
sales2.cs2
FROM DAILYSALES dls

-- Step 4

LEFT OUTER JOIN(
SELECT cursales AS cs1
FROM DAILYSALES dls
WHERE dtmtradedate BETWEEN @startDate1 AND @endDate1
GROUP BY cursales ) AS sales1 ON sales1.cursales = dls.cursales -- Year one
LEFT OUTER JOIN (
SELECT cursales AS cs2
FROM DAILYSALES dls
WHERE dtmtradedate BETWEEN @startDate2 AND @endDate2
GROUP BY cursales ) AS sales2 ON sales2.cursales = dls.cursales; -- Year two

-- Step 5

SELECT StoreLocation,
TransactionDt,
SalesValue,
SalesValue2
FROM @yearFigures -- From here you"re pulling from your temp table (your output)

Debería obtener lo que está buscando con esto. La LEFT OUTER JOIN separó los valores de ventas por años y los nombró. Lo ejecuté en uno de mis dbo durante 1 fila y obtuve este

StoreLocation  TransactionDt  PreviousYear   CurrentYear
AESKAGGS         03/14/2014     828.35         400.00

OTRA VEZ, sean suaves conmigo chicos ... Soy un novato.