0

我有两个表,出货量和条目。

我必须选择并将所选 item_id=113 的条目和 item_id=204 的出货量选择并插入到另一个表中,我的选择是当前月份和年份的按周的条目和出货量的总和。

我有这两个查询,每个查询都针对每个项目。

sum(cantidad_ent)=输入数量 fecha=日期

SELECT sum(cantidad_ent) Entradas_Tortilla, DATEPART(wk, fecha) Semana, DATEPART(m, fecha) Mes, DATEPART(yy, fecha)
FROM entradas
where id_articulo=113
and month(fecha)=month(getdate()) and year(fecha)=year(getdate())
GROUP BY    DATEPART(wk, fecha), DATEPART(m, fecha), DATEPART(yy, fecha)
order by DATEPART(wk, fecha), datepart(m, fecha)

sum(cant_sale)=发货数量

SELECT sum(cant_Sale) Salidas_Costales, DATEPART(wk, fecha) Semana, DATEPART(m, fecha) Mes, DATEPART(yy, fecha)
FROM salidas
where id_articulo=204
and month(fecha)=month(getdate()) and year(fecha)=year(getdate())
GROUP BY    DATEPART(wk, fecha), DATEPART(m, fecha), DATEPART(yy, fecha)
order by DATEPART(wk, fecha), datepart(m, fecha)

他们回来了

Tortillas_entries/Week/Month/Year
      4503        27    7    2013
      3822       28    7    2013

FlourSack_shipments/Week/Month/Year
      7             27    7    2013
      6             27    7    2013

文将面粉袋从仓库寄出,它们被加工成玉米饼,然后我们从制作的玉米饼中进行录入。这个查询是为了让我知道每周发送和制作多少个玉米饼和面粉袋,我还必须注册一周总共制作了多少个玉米饼

(tortillas_entries/flour sacks) as Rendimiento (生产性能) 4503/7 3822/6

输入的玉米饼总数和发送的麻袋数量是同时登记的,因此在同一天我们可以知道发送了多少麻袋以及用这些麻袋制作了多少玉米饼。

我正在寻找的结果是这样的:

Tortillas_entries/FlourSack_Shipment/Performance/Week/Month/Year
      4503                7             643.28    27    7    2013
      3822                6              637      28    7    2013

提前致谢!!

4

2 回答 2

0

INNER JOIN像这样应该工作:

SELECT 
    sum(e.cantidad_ent) Tortillas_entries, 
    sum(s.cant_Sale) FlourSack_Shipment, 
    sum(cast(e.cantidad_ent as decimal(6,2))) / sum(s.cant_Sale) Performance,
    DATEPART(wk, e.fecha) Semana, 
    DATEPART(m, e.fecha) Mes, 
    DATEPART(yy, e.fecha)
FROM entradas e
inner join salidas s on 
    DATEPART(wk, e.fecha) = DATEPART(wk, s.fecha) AND 
    DATEPART(m, e.fecha) = DATEPART(m, s.fecha) AND 
    DATEPART(yy, e.fecha) = DATEPART(yy, s.fecha)
where e.id_articulo=113
and s.id_articulo=204
and month(e.fecha)=month(getdate()) and year(e.fecha)=year(getdate())
GROUP BY    DATEPART(wk, e.fecha), DATEPART(m, e.fecha), DATEPART(yy, e.fecha)
order by DATEPART(wk, e.fecha), datepart(m, e.fecha)

在这里找到的 SQLFiddle 示例

于 2013-07-09T21:27:21.813 回答
0

尝试这个:

WITH My_CTE (Entradas_Tortilla, Semana, Mes, Ano) AS
(
SELECT sum(cantidad_ent) AS 'Entradas_Tortilla'
    ,DATEPART(wk, fecha) AS 'Semana'
    ,DATEPART(m, fecha) AS 'Mes'
    ,DATEPART(yy, fecha) AS 'Ano'
FROM entradas
WHERE id_articulo=113 and month(fecha)=month(getdate()) and year(fecha)=year(getdate())
GROUP BY DATEPART(wk, fecha)
    ,DATEPART(m, fecha)
    ,DATEPART(yy, fecha)
)
SELECT m.Entradas_Tortilla
    ,sum(s.cant_Sale) AS 'Salidas_Costales'
    ,CAST(m.Entradas_Tortilla AS REAL)/CAST(sum(s.cant_Sale) AS REAL) AS 'Performance'
    ,Semana
    ,Mes
    ,Ano
FROM My_CTE m INNER JOIN salidas s ON m.Semana = DATEPART(wk, s.fecha)
    AND m.Mes = DATEPART(m, s.fecha)
    AND m.Ano = DATEPART(yy, s.fecha)
WHERE s.id_articulo=204 and month(s.fecha)=month(getdate()) and year(s.fecha)=year(getdate())
GROUP BY Entradas_Tortilla, Semana, Mes, Ano
ORDER BY Ano, Mes, Semana

希望我没有打错字或遗漏什么。可能有比使用通用表表达式更优雅的方法,但我认为这对你有用。不过好好测试一下,如果我搞砸了,请告诉我 :-) 已编辑 - 是的,忘记将整数转换为实数,以便它们可以被除;现在修复

于 2013-07-09T22:47:04.480 回答