Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
В таблице есть две колонки - Дата и Количество
Когда делаю запрос на сумму всех количеств то она выводит не реальную сумму а сумму умноженную на количество записей Дата. Подскажите как быть в таких случаях?
13 дек 13, 15:17    [15288968]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Glory
Member

Откуда:
Сообщений: 104760
Slash232
Подскажите как быть в таких случаях?

Убрать из запроса умножение суммы на количество записей
13 дек 13, 15:19    [15288982]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Glory, нету такого.

Вот фрагмент:
left outer join [DepartmentsStruktureMove] DSM1 on DSM1.[Операция] = 1 and DSM1.[Код товара] = [Positions].[Код товара] and DSM1.[Отдел] = 1 and DSM1.[Состояние] = 2 and DSM1.[Дата] >= [DepartmentsCounting].[Дата]


Вот выборка необходимой записи:
,isnull(sum(DSM1.[Количество]),0) as [Минус вложить]


Выводит сумму умноженную на количество Дата
13 дек 13, 15:24    [15289019]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Glory
Member

Откуда:
Сообщений: 104760
Slash232
Выводит сумму умноженную на количество Дата

И где здесь "умножение" ?
13 дек 13, 15:25    [15289023]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Glory, блин, в том то и дело что нет а сумма не верная
13 дек 13, 15:25    [15289030]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Glory
Member

Откуда:
Сообщений: 104760
Slash232
Glory, блин, в том то и дело что нет а сумма не верная

Вы хотите сказать, что сервер от себя добавляет какие вычисления ?
13 дек 13, 15:27    [15289044]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
o-o
Guest
что-то в таком духе, да?
declare @t1 table(id int, dt datetime, val int)
insert into @t1
values ((1), '20130101', 10), ((2), '20130101', 10), ((3), '20130101', 10),
       ((4), '20130102', 10), ((5), '20130102', 10), ((6), '20130102', 10)
       
declare @t2 table (id int, state int)
insert into @t2 values (3, 1), (6, 1)       

select *
from @t1 t1 left join @t2 t2 on t1.id = t2.id and t2.state = 1

select t1.dt, SUM(t1.val)
from @t1 t1 left join @t2 t2 on t1.id = t2.id and t2.state = 1
group by t1.dt 
-----------------------------------------------
id	dt	val	id	state
1	2013-01-01 00:00:00.000	10	NULL	NULL
2	2013-01-01 00:00:00.000	10	NULL	NULL
3	2013-01-01 00:00:00.000	10	3	1
4	2013-01-02 00:00:00.000	10	NULL	NULL
5	2013-01-02 00:00:00.000	10	NULL	NULL
6	2013-01-02 00:00:00.000	10	6	1


------------------------------------------------
dt	(No column name)
2013-01-01 00:00:00.000	30
2013-01-02 00:00:00.000	30
13 дек 13, 15:37    [15289136]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
o-o, ДА только без "group by t1.dt "
13 дек 13, 15:39    [15289154]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
В чём проблема?
13 дек 13, 15:48    [15289217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Glory
Member

Откуда:
Сообщений: 104760
Slash232
В чём проблема?

В том, что вы считаете, что это сервер что-то делает неправильно
13 дек 13, 15:49    [15289227]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Glory, я так не считаю, но и ошибку свою сам не вижу
13 дек 13, 15:50    [15289235]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Glory
Member

Откуда:
Сообщений: 104760
Slash232
я так не считаю, но и ошибку свою сам не вижу

Неверный результат <> не тот результат, что я хочу получить
Начните с высянения того, сколько записей возвращает ваш запрос без суммы
13 дек 13, 15:57    [15289284]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Slash232,

приведите весь запрос, скрипты создания таблиц, скрипты тестовых данных
а то

"у меня ошибка, но вот "два кусочка", в них же же все верно?!" = "провангуйте"

,isnull(sum(DSM1.[Количество]),0) as [Минус вложить]

почему не?

,sum(isnull(DSM1.[Количество],0)) as [Минус вложить]
13 дек 13, 15:59    [15289315]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Slash232,

и почему "только без group by" ??
13 дек 13, 16:01    [15289330]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Glory, Спасибо разобрался в каком моменте возвращает две записи. Теперь вопрос как сделать чтобы не возвращало две записи?

Фрагмент который получает сразу две записи:
left outer join [Bids] on [Bids].[Дата] >= [DepartmentsCounting].[Дата] and [Bids].[Состояние] = 2
left outer join [BidsInDetails] on [BidsInDetails].[Заявка] = [Bids].[Индекс заявки] and [BidsInDetails].[Код товара] = [Positions].[Код товара]

,isnull(sum([BidsInDetails].[Количество]),0) as [Минус заявок]


Ситуация заключается в том что в [BidsInDetails] две записи который подходят под эту привязку. А мне нужна только сумма их количеств
13 дек 13, 16:07    [15289374]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Glory
Member

Откуда:
Сообщений: 104760
Slash232
Ситуация заключается в том что в [BidsInDetails] две записи который подходят под эту привязку.

Т.е. нужно за вас придумать дополнительное условие, которое из двух записей выберет одну ?
13 дек 13, 16:12    [15289408]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Glory, Нет
Мне нужна только сумма их количеств, остальное у них (кроме даты) полностью сопадает.
13 дек 13, 16:15    [15289436]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Glory
Member

Откуда:
Сообщений: 104760
Slash232
Нет
Мне нужна только сумма их количеств, остальное у них (кроме даты) полностью сопадает.

Мда. Функция SUM вообщето и вычисляет сумму
13 дек 13, 16:17    [15289453]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Slash232
Мне нужна только сумма их количеств, остальное у них (кроме даты) полностью сопадает.
То есть вам нужны сумма их количеств? Тогда у вас всё правильно, у вас сумма и делается.

Вы определитесь, что нужно.

Странная у вас система. В таблице BidsInDetails есть записи о товарах в заявке, но почему то нужно учитывать не все записи. Может, там есть признак "удалённая запись" или что то в этом роде?
13 дек 13, 16:19    [15289475]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Значит вы меня не поняли.
13 дек 13, 16:48    [15289688]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
alexeyvg, у меня получается сумма их количеств умноженная на количество записей. Вот я и пытаюсь понять как переписать запрос так чтобы этого не было.
13 дек 13, 16:49    [15289697]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Slash232,

если вас _никто_ не понял, значит вы не умеет объяснять

приведите ВЕСЬ запрос
13 дек 13, 16:52    [15289714]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
SELECT 
[DepartmentsCounting].[Количество] as [Последний подсчёт]
,count([DepartmentsCounting].[Количество])
,isnull(sum([BidsInDetails].[Количество]),0) as [Минус заявок]
,isnull(sum(DT1.[Количество]),0) as [Минус передач]
,isnull(sum(DT2.[Количество]),0) as [Плюс передач]
,isnull(sum(DSCsInDetails.[Количество]),0) as [Минус продажи безнал]
,isnull(sum([DeliveryInDetails].[Количество]),0) as [Плюс поставки]

,isnull(sum(DSM1.[Количество]),0) as [Минус вложить]
,isnull(sum(DSM2.[Количество]),0) as [Плюс выложить]

--,round([DepartmentsCounting].[Количество] - isnull(sum([BidsInDetails].[Количество]),0) - isnull(sum(DT1.[Количество]),0) + isnull(sum(DT2.[Количество]),0) - isnull(sum(DSCsInDetails.[Количество]),0) + isnull(sum([DeliveryInDetails].[Количество]),0),3) as [ИТОГО]
FROM [Positions] 
left outer join [DepartmentsCounting] on [DepartmentsCounting].[Код родителя] is null and [DepartmentsCounting].[Код товара] = [Positions].[Код товара] and [DepartmentsCounting].[Отдел] = 1 and [DepartmentsCounting].[Код родителя] is null and [DepartmentsCounting].[Состояние операции] = 2 and [DepartmentsCounting].[Дата] = (select max([DepartmentsCounting].[Дата]) from [DepartmentsCounting] where [DepartmentsCounting].[Код товара] = [Positions].[Код товара] and [DepartmentsCounting].[Код родителя] is null and [DepartmentsCounting].[Состояние операции] = 2 and [DepartmentsCounting].[Отдел] = 1) 

left outer join [Bids] on [Bids].[Дата] >= [DepartmentsCounting].[Дата] and [Bids].[Состояние] = 2
left outer join [BidsInDetails] on [BidsInDetails].[Заявка] = [Bids].[Индекс заявки] and [BidsInDetails].[Код товара] = [Positions].[Код товара]

left outer join [DepartmentsTransfer] DT1 on DT1.[Код товара] = [Positions].[Код товара] and DT1.[Дата] >= [DepartmentsCounting].[Дата] and DT1.[Состояние] = 2 and DT1.[От кого] = 1 
left outer join [DepartmentsTransfer] DT2 on DT2.[Код товара] = [Positions].[Код товара] and DT2.[Дата] >= [DepartmentsCounting].[Дата] and DT2.[Состояние] = 2 and DT2.[Кому] = 1 
left outer join [DepartmentsSalesCashless] DSCs on DSCs.[Дата] >= [DepartmentsCounting].[Дата] and DSCs.[Состояние] = 2 
left outer join [DepartmentsSalesCashlessInDetails] DSCsInDetails on DSCsInDetails.[Продажа] = DSCs.[Индекс] and DSCsInDetails.[Код товара] = [Positions].[Код товара]
left outer join [Delivery] on [Delivery].[Дата] >= [DepartmentsCounting].[Дата] and [Delivery].[Состояние] = 2 
left outer join [DeliveryInDetails] on [DeliveryInDetails].[Поставка] = [Delivery].[Индекс] and [DeliveryInDetails].[Код товара] = [Positions].[Код товара]

left outer join [DepartmentsStruktureMove] DSM1 on DSM1.[Операция] = 1 and DSM1.[Код товара] = [Positions].[Код товара] and DSM1.[Отдел] = 1 and DSM1.[Состояние] = 2 and DSM1.[Дата] >= [DepartmentsCounting].[Дата]
left outer join [DepartmentsStruktureMove] DSM2 on DSM2.[Операция] = 0 and DSM2.[Код товара] = [Positions].[Код товара] and DSM2.[Отдел] = 1 and DSM2.[Состояние] = 2 and DSM2.[Дата] >= [DepartmentsCounting].[Дата]

where [Positions].[Код товара] = 551 
group by 
[DepartmentsCounting].[Количество]
13 дек 13, 16:56    [15289755]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом ч.3  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 610
"умножение" вот здесь кроется
...AND DT1.[Дата] >= [DepartmentsCounting].[Дата]...
и иже с ними
14 дек 13, 04:02    [15292053]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить