Выбор 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 найден здесь