SQL按当月的周选择

时间:2013-07-09 20:01:00

标签: sql-server sql-server-2005 select

我有两张桌子,货物和条目。

我必须在另一个表中选择并插入所选item_id = 113的条目以及item_id = 204的货件,我的选择是当前月份和年份的每周的条目和货件的总和。

我有两个查询,每个查询每个项目。

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

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 /面粉袋)作为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

提前致谢!!

2 个答案:

答案 0 :(得分: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示例找到here

答案 1 :(得分: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

希望我没有写错字或留下一些东西。与使用公用表表达式相比,可能有更优雅的方法,但我认为这对您有用。尽管测试得很好,让我知道如果我搞砸了:-) EDITED - 是的,忘记将整数转换成真实的它们可以分开;现在修复