Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
san_d Member Откуда: Киев Сообщений: 60 |
Привет, получаю странный результат выборки на SQLServer 2000-8.00.2050. На SQLServer 2016 все работает как и ожидается, на других версиях нет возможности проверить. Код: create function _tmp_test(@par int) returns char(1) as begin return 'Z' end go if object_id('tempdb..#tmp1') is not null drop table #tmp1 if object_id('tempdb..#tmp2') is not null drop table #tmp2 create table #tmp1 ( lineid int not null, docid char(9) not null, doctype int not null, prop1_id char(9) not null, value int not null primary key(lineid) ) create table #tmp2 ( propid char(9) not null, prop_1 char(1) not null primary key(propid) ) insert into #tmp1 values(1,'A',1157,'prop_id1',39500) insert into #tmp1 values(2,'A',1157,'prop_id2',7500) insert into #tmp2 values('prop_id1','A') insert into #tmp2 values('prop_id2','B') select prop1_id ,doc ,Sum(value) value from ( select prop1_id = tmp2.prop_1, doc = dbo._tmp_test(tmp1.doctype) + tmp1.docid, value = tmp1.value from #tmp1 tmp1 left join #tmp2 tmp2 on tmp2.propid = tmp1.prop1_id )vt group by prop1_id ,doc having Sum(value)<>0 go drop function _tmp_test результат:
картинка Если убрать функцию или having, результат тот, что и ожидается. То есть: select prop1_id ,doc ,Sum(value) value from ( select prop1_id = tmp2.prop_1, doc = dbo._tmp_test(tmp1.doctype) + tmp1.docid, value = tmp1.value from #tmp1 tmp1 left join #tmp2 tmp2 on tmp2.propid = tmp1.prop1_id )vt group by prop1_id ,doc или select prop1_id ,doc ,Sum(value) value from ( select prop1_id = tmp2.prop_1, doc = /*dbo._tmp_test(tmp1.doctype)*/ 'Z' + tmp1.docid, value = tmp1.value from #tmp1 tmp1 left join #tmp2 tmp2 on tmp2.propid = tmp1.prop1_id )vt group by prop1_id ,doc having Sum(value)<>0 выдает то, что ожидается:
В чем проблема с первым запросом, есть у кого-то идеи? |
||||||||||||||||||||||||||
8 май 17, 03:05 [20464711] Ответить | Цитировать Сообщить модератору |
Aleksey br Member Откуда: Сообщений: 73 |
А разве в функции можно использовать INSERT? |
8 май 17, 06:34 [20464739] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
был такой баг в 2000-ом, надо выставить TF 9056 ссылку на тему дам MS SQL 2000 group by function но само kb уже истребили |
8 май 17, 09:26 [20464786] Ответить | Цитировать Сообщить модератору |
san_d Member Откуда: Киев Сообщений: 60 |
o-o, спасибо! workaround помог doc = dbo._tmp_test(tmp1.doctype+'') + tmp1.docid, |
8 май 17, 11:12 [20464879] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |