Выбор SQL по неделям текущего месяца

У меня есть две таблицы, поставки и записи.

Я должен выбрать и вставить в другую таблицу записи выбранного item_id=113 и отгрузки item_id=204, мой выбор - это сумма записей и отгрузок по неделям текущего месяца и года.

У меня есть два запроса, каждый для каждого элемента.

сумма (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)

сумма (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 ответа

Решение

Попробуй это:

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

Надеюсь, я не сделал опечатку или что-то пропустил. Возможно, есть более элегантные способы сделать это, чем использовать обычное табличное выражение, но я думаю, что это сработает для вас. Протестируйте это хорошо, хотя, и дайте мне знать, если я испортил:-) РЕДАКТИРОВАНИЕ - да, забыл привести целые числа как реальные, чтобы их можно было разделить; исправлено сейчас

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 найден здесь

Другие вопросы по тегам