on 11-13-2014 6:58 PM
Jovenes expertos solicito nuevamente su ayuda con un query que la verdad no he podido culminar y agardezco su ayuda lo que necesito es hacer la suma de varios querys en un SP que ya tengo armado pero no he podido realizarlo despues de varios pruebas no he podido armarlo como lo necesito.
El SP es el siguiente:
SELECT nombre, nombre_rubro,orden, sum( cantidad)[cantidad] , sum(costo) [costo]
-------------Query 1 ---------------------------
from v_inventario_inicial
where docdate < @FechaIni
and codigoplanta =@Planta
group by nombre, nombre_rubro,orden
union all
-----------Query 2-------------------------------
SELECT nombre, nombre_rubro,orden, sum( cantidad)[cantidad] , sum(costo) [costo]
from v_compras_consumos
where docdate between @FechaIni and @FechaFin
and codigoplanta= @Planta
group by nombre, nombre_rubro,orden
union all
-------------Query 3 ------------------
SELECT dscription, [NOMBRE Rubro],RUBRO, sum( expr1) [cantidad], sum(expr2) [costo]
from v_consumos2
where Docdate between @FechaIni and @FechaFin
and U_Cod_Planta= @Planta
Group By dscription,[nombre Rubro], RUBRO
order by nombre,orden
necesito hacer una sumatoria de la columna Cantidad y la columna Costo en base a estos 3 querys que muestra el SP y crear un cuarto query en el mismo SP con esta informacion.
espero me puedan ayudar y de antemano muy agradecido por su ayuda y su tiempo.
Saludos
necesitas sumar los resultados de las consutas que haces??
lo que te podria ayudar es variabilizar los resultados y luego sumarlos.
ejemplo:
declare @variable1 int, @variable2 int
select
@variable1=sum(DocEntry),
@variable2=sum(DocNum)
from dbo.ORDR
select @variable1 + @variable2
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Gracias Alexis por tu respuesta y te comento que siguiendo tu ejemplo logre visualizar la informacion pero cuando realizo el 4 query me da un error el sistema y el es:
Msg 141, Level 15, State 1, Line 0
No debe combinarse una instrucción SELECT que asigne un valor a una variable con operaciones de recuperación de datos.
el query me quedo de esta forma:
declare @fechaIni datetime
declare @fechafin datetime
declare @planta varchar(8)
set @fechaini='20140101'
set @fechafin='20140930'
set @planta= 'P09'
declare @Nombre varchar(100)
declare @NombreRubro varchar(200)
declare @Orden Varchar(2)
declare @Cantidad int
declare @Costo1 int
declare @Costo2 int
declare @Costo3 int
SELECT @Nombre=nombre, @NombreRubro=nombre_rubro, @Orden=orden, @Cantidad=sum(cantidad),
@Costo1=sum(costo)
from v_inventario_inicial
where docdate < @FechaIni
and codigoplanta =@Planta
group by nombre, nombre_rubro,orden
union all
SELECT @Nombre=nombre, @NombreRubro=nombre_rubro, @Orden=orden, @Cantidad=sum(cantidad),
@Costo2=sum(costo)
from v_compras_consumos
where docdate between @FechaIni and @FechaFin
and codigoplanta= @Planta
group by nombre, nombre_rubro,orden
union all
SELECT @Nombre=dscription, @NombreRubro=[NOMBRE Rubro], @Orden=RUBRO, @Cantidad=sum(expr1),
@Costo3=sum(expr2)
from v_consumos2
where Docdate between @FechaIni and @FechaFin
and U_Cod_Planta= @Planta
Group By dscription,[nombre Rubro], RUBRO
union all
SELECT @Nombre=nombre, @NombreRubro=nombre_rubro, @Orden=orden, @Cantidad=sum(cantidad), (@Costo1+@Costo2+@Costo3)[Costo]
from v_inventario_final
where docdate <= @FechaFin -- <= @FechaFin
and codigoplanta= @Planta
group by nombre, nombre_rubro,orden
order by @nombre
Espero me puedas ayudar a solucionar este incoveniente.
de antemano muy agradecido por la ayuda y el tiempo.
Saludos
Hola, Carlos.
Intenta con este query:
declare @FechaIni date; --> declarar la variable como la tienes.
declare @FechaFin date; --> declarar la variable como la tienes.
declare @Planta nvarchar(100); --> declarar la variable como la tienes.
set @FechaIni = '20140101'; --> Asignas tus valores.
set @FechaFin = '20140131'; --> Asignas tus valores.
set @Planta = 'Planta01'; --> Asignas tus valores.
with TablaDatos (nombre, nombre_rubro, orden, cantidad, costo)
as
(
------------------ Aquí INICIA tu query ------------------
SELECT nombre, nombre_rubro, orden, sum( cantidad)[cantidad] , sum(costo) [costo]
-------------Query 1 ---------------------------
from v_inventario_inicial
where docdate < @FechaIni
and codigoplanta =@Planta
group by nombre, nombre_rubro,orden
union all
-----------Query 2-------------------------------
SELECT nombre, nombre_rubro,orden, sum( cantidad)[cantidad] , sum(costo) [costo]
from v_compras_consumos
where docdate between @FechaIni and @FechaFin
and codigoplanta= @Planta
group by nombre, nombre_rubro,orden
union all
-------------Query 3 ------------------
SELECT dscription, [NOMBRE Rubro],RUBRO, sum( expr1) [cantidad], sum(expr2) [costo]
from v_consumos2
where Docdate between @FechaIni and @FechaFin
and U_Cod_Planta= @Planta
Group By dscription,[nombre Rubro], RUBRO
------------------ Aquí FINALIZA tu query ------------------
)
select 'Detalle' [TipoDato], * from TablaDatos -- Aquí te mostrará la información del query como lo tienes actualmente.
union all
select 'Total' [TipoDato], '', '', '', sum(cantidad) cantidad, sum(costo) costo from TablaDatos --> Aquí te muestra la sumatoria de la columna Cantidadd y Costo.
Yo en mis pruebas me funciona, espero en las tuyas también.
Suerte y Saludos,
JC.
gracias Juan Carlos por la ayuda corre perfecto pero los datos me los muestra de la siguiente forma:
Cantidad Costo
ItemName 1 Inventario Incial 10 100
2 Compras 5 50
3 Ajustes 2 5
4 Consumos 1 5
5 Inventario Final 12 140 <--- Sumatoria necesito en base al 100+50-5-5
pero siempre con el query 4 siga apareciendo ya que de el obtengo el itemName, o que hubiera otra forma en la cual pueda obtener el inventario final con una sumatoria de los anteriores agrupado por el nombre del item.
Te agradezco siempre la ayuda y si me pudieras ayudar.
Quiero entender que lo que falta es en el último conjunto de resultados, que te muestre la sumatoria de Cantidad y Costo pero agrupado por ItemName. Si es así, intenta así el query:
declare @FechaIni date; --> declarar la variable como la tienes.
declare @FechaFin date; --> declarar la variable como la tienes.
declare @Planta nvarchar(100); --> declarar la variable como la tienes.
set @FechaIni = '20140101'; --> Asignas tus valores.
set @FechaFin = '20140131'; --> Asignas tus valores.
set @Planta = 'Planta01'; --> Asignas tus valores.
with TablaDatos (nombre, nombre_rubro, orden, cantidad, costo)
as
(
------------------ Aquí INICIA tu query ------------------
SELECT nombre, nombre_rubro, orden, sum( cantidad)[cantidad] , sum(costo) [costo]
-------------Query 1 ---------------------------
from v_inventario_inicial
where docdate < @FechaIni
and codigoplanta =@Planta
group by nombre, nombre_rubro,orden
union all
-----------Query 2-------------------------------
SELECT nombre, nombre_rubro,orden, sum( cantidad)[cantidad] , sum(costo) [costo]
from v_compras_consumos
where docdate between @FechaIni and @FechaFin
and codigoplanta= @Planta
group by nombre, nombre_rubro,orden
union all
-------------Query 3 ------------------
SELECT dscription, [NOMBRE Rubro],RUBRO, sum( expr1) [cantidad], sum(expr2) [costo]
from v_consumos2
where Docdate between @FechaIni and @FechaFin
and U_Cod_Planta= @Planta
Group By dscription,[nombre Rubro], RUBRO
------------------ Aquí FINALIZA tu query ------------------
)
select 'Detalle' [TipoDato], * from TablaDatos /* Aquí te mostrará la información del query como lo tienes actualmente.*/
union all
select 'Total' [TipoDato], nombre, nombre_rubro, '', sum(cantidad) cantidad, sum(costo) costo from TablaDatos group by nombre, nombre_rubro /* Aquí te muestra la sumatoria de la columna Cantidadd y Costo. */
order by 2,1 /* Ordenar por ItemName y por columna Tipo */
La columna Cantidad y Costo quiero pensar que tus tablas ya tienen sus signos negativos para las salidas de inventario, de lo contrario tu query solo va estar incrementando estos 2 campos aún cuando sean salidas de inventario.
La tabla v_inventario_inicial y las demás así se llaman o estás poniendo nombres ficticios en lugar de nombres de tablas de SAP B1?
Si es no es como lo necesitas, puedes poner una tabla en la que se muestre cómo quieres la salida de información?
Saludos,
JC.
Hola Juan Carlos perdona pero hasta hoy pude probar el query pero fijate que me arroja un error
el error el es:
Msg 2715, Level 16, State 3, Line 48
Columna, parámetro o variable nº 2: no se encuentra el tipo de datos date.
El parámetro o la variable '@FechaFin' tiene un tipo de datos no válido.
Msg 2715, Level 16, State 3, Line 48
Columna, parámetro o variable nº 3: no se encuentra el tipo de datos date.
El parámetro o la variable '@FechaIni' tiene un tipo de datos no válido
sobre entiendo que las fechas no las encuentra en la tabladatos como podria colocarle fechas a esta tabla.
de agradezca tu ayuda y tu tiempo.
Saludos
User | Count |
---|---|
98 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.