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 № 1De 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.