Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Есть выборка с использованием оператора UNION: select t1 ............... Group By t1 UNION select t2 ............... Group By t2 В результате группируются значения по t1 и по t2 и есть повторяющиеся записи, пример: Descr Kol Summ ---------------------------------------------------------------- ---------------------------------------- ---------------------------------------- АбрикосСиропSKO 12*850г/Греция/ -60.000 -2229.97 АбрикосСиропSKO 12*850г/Греция/ 720.000 21309.70 А как этого избежать (как создать как бы внешний Group By) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 14:14 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
select t1 from (select t1 ............... UNION select t2 ............... ) AS x Group By t1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 14:20 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Вот полностью мой запрос: if exists (select CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102) from _1SJOURN where (GetDate() - CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102)) < 7) Begin select Bizon..sc33.Descr from (select distinct Bizon..sc33.Descr, sum(Bizon..ra1130.sp1133)* (-1) as Kol, sum(Bizon..ra1130.sp2655)* (-1) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] where Bizon..ra1130.sp3027 = 'П' or Bizon..ra1130.sp3027 = 'Р' UNION select distinct Bizon..sc33.Descr, sum((Bizon..ra1130.sp1133)) as Kol, sum((Bizon..ra1130.sp2655)) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] where Bizon..ra1130.sp3027 = 'З') as x Group By Bizon..sc33.Descr end А вот ошибка при выполнении: The column prefix 'Bizon..sc33' does not match with a table name or alias name used in the query. В чём проблема ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 14:36 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
if exists (select CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102) from _1SJOURN where (GetDate() - CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102)) < 7) Begin select Descr, sum(kol) as kol, sum(summ) as summ from (select distinct Bizon..sc33.Descr,(Bizon..ra1130.sp1133)* (-1) as Kol, (Bizon..ra1130.sp2655)* (-1) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] where Bizon..ra1130.sp3027 = 'П' or Bizon..ra1130.sp3027 = 'Р' UNION select distinct Bizon..sc33.Descr,Bizon..ra1130.sp1133 as Kol, Bizon..ra1130.sp2655 as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] where Bizon..ra1130.sp3027 = 'З' ) as x Group By Descr end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 14:44 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо, забыл 2 поля... А не подскажете, моё условие: if exists (select CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102) from _1SJOURN where (GetDate() - CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102)) < 7) которое перед проверяется только 1 раз ? Если ДА, то как его включить в проверку по каждой строке таблицы ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 14:50 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
А еще лучше так if exists (select CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102) from _1SJOURN where (GetDate() - CONVERT (datetime,SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,1,4)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,5,2)+'.'+ SUBSTRING(Bizon.._1SJOURN.DATE_TIME_IDDOC,7,2),102)) < 7) Begin CREATE TABLE #temp1(my_sp3027 char(1), op_sign int) INSERT #temp1 VALUES('П', -1) INSERT #temp1 VALUES('Р', -1) INSERT #temp1 VALUES('З', 1) select Bizon..sc33.Descr, sum(Bizon..ra1130.sp1133 * #temp1.op_sign) as Kol, sum(Bizon..ra1130.sp2655 * #temp1.op_sign) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] INNER JOIN #temp1 ON Bizon..ra1130.sp3027 = #temp1.my_sp3027 Group By Bizon..sc33.Descr end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 14:52 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Если ДА, то как его включить в проверку по каждой строке таблицы ??? Конечно один раз - это же ведь не часть запроса. В каком формате у вас записаны данные в Bizon.._1SJOURN.DATE_TIME_IDDOC ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:03 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Спасибо, но последняя конструкция дает ошибку : Server: Msg 446, Level 16, State 9, Line 12 Cannot resolve collation conflict for equal to operation. И ещё: ответьте плз. на мой вопрос по поводу условия (предыдущий)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:04 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Спасибо, но последняя конструкция дает ошибку : Server: Msg 446, Level 16, State 9, Line 12 Cannot resolve collation conflict for equal to operation. И как мой ИФ включить в запрос ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:12 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Вот формат; DATE_TIME_IDDOC ----------------------- 200112313KLMO0 1 200112313KJHI8 2 200112313KHCCG 3 200112313KF76O 4 200112313KD20W 5 Для этого я его и преобразовываю ф формат даты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:14 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Cannot resolve collation conflict for equal to operation. А так CREATE TABLE #temp1(my_sp3027 nchar (1), op_sign int) INSERT #temp1 VALUES( N 'П', -1) INSERT #temp1 VALUES( N 'Р', -1) INSERT #temp1 VALUES( N 'З', 1) DECLARE @current_date datetime SET @current_date = GETDATE() select Bizon..sc33.Descr, sum(Bizon..ra1130.sp1133 * #temp1.op_sign) as Kol, sum(Bizon..ra1130.sp2655 * #temp1.op_sign) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] INNER JOIN #temp1 ON Bizon..ra1130.sp3027 = #temp1.my_sp3027 WHERE DATEDIFF(dd, LEFT(Bizon.._1SJOURN.DATE_TIME_IDDOC, 8 ), @current_date) < 7 Group By Bizon..sc33.Descr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:25 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Выводит ошибку : Server: Msg 446, Level 16, State 9, Line 9 Cannot resolve collation conflict for equal to operation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:29 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Хм, а какого типа у вас поле Bizon..ra1130.sp3027 и какой у него collation ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:35 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
sp3027 ------ Г Г Т.е поле символьного типа, длина 6. Извините, поехал домой. Буду завтра на связи в 9.00. Если есть ICQ - мой номер: 128053033. Хотелось бы завтра возобновить беседу... С уважением. Андрей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:42 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Символьные поля бывают разные: char, varchar, nchar, nvarchar. У вас какое ? Collation можно посмотреть в EM или с помощью USE Bizon select column_name, collation_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name = 'ra1130' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2002, 15:56 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Тип --> char, длина 1 Запрос: USE Bizon select column_name, collation_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name = 'ra1130' выдал ошибку... А collation у всей БД - compatibility_106_409_30003 как посмотреть коллэйшион отдельной таблицы - не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 08:19 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
поле Bizon..ra1130.sp3027 - имеет такой-же коллейшион, (дафаулт). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 11:20 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
А collation у всей БД - compatibility_106_409_30003 Первый раз встречаю такое collation. Ну да бог с ним Во вариант, который должен работать, хотя и нравится он мне меньше select Bizon..sc33.Descr, sum(Bizon..ra1130.sp1133 * CASE WHEN Bizon..ra1130.sp3027 IN('П', 'Р') THEN -1 WHEN Bizon..ra1130.sp3027 IN('З') THEN 1 ELSE 0 END) as Kol, sum(Bizon..ra1130.sp2655 * CASE WHEN Bizon..ra1130.sp3027 IN('П', 'Р') THEN -1 WHEN Bizon..ra1130.sp3027 IN('З') THEN 1 ELSE 0 END) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] INNER JOIN #temp1 ON Bizon..ra1130.sp3027 = #temp1.my_sp3027 WHERE DATEDIFF(dd, LEFT(Bizon.._1SJOURN.DATE_TIME_IDDOC, 8 ), @current_date) < 7 Group By Bizon..sc33.Descr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 12:41 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Попробуйте ради интереса еще вот такой вариант CREATE TABLE #temp1(my_sp3027 char(1) COLLATE compatibility_106_409_30003, op_sign int) INSERT #temp1 VALUES('П', -1) INSERT #temp1 VALUES('Р', -1) INSERT #temp1 VALUES('З', 1) DECLARE @current_date datetime SET @current_date = GETDATE() select Bizon..sc33.Descr, sum(Bizon..ra1130.sp1133 * #temp1.op_sign) as Kol, sum(Bizon..ra1130.sp2655 * #temp1.op_sign) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] INNER JOIN #temp1 ON Bizon..ra1130.sp3027 = #temp1.my_sp3027 WHERE DATEDIFF(dd, LEFT(Bizon.._1SJOURN.DATE_TIME_IDDOC, 8 ), @current_date) < 7 Group By Bizon..sc33.Descr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 12:49 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Итог тот-же: Server: Msg 446, Level 16, State 9, Line 1 Cannot resolve collation conflict for equal to operation. Я и не знаю что делать (( Может быть поможет информация : Бакап восстанавливается с SQL70 в 2000. Cyrillic_General_CI_AI_KI_SI - в 7.0 коллэйшион, такого в 2000 не было, поставили Cyrillic_General_CI_AI После восстановления бакапа: compatibility_106_409_30003 Бакап восстанавливается в существующую базу 2000 (бакап 7.0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 12:50 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Последний запрос тоже ничего не дал, пишет: Server: Msg 2715, Level 16, State 7, Line 1 Column or parameter #2: Cannot find data type compatibility_106_409_30003. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 12:58 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Ничего не понимаю. Как же у вас работает сравнение в вашем оригинальном запросе ? ... where Bizon..ra1130.sp3027 = 'П' or Bizon..ra1130.sp3027 = 'Р' .... Где вы выполняете предложенные скрипты ? В QA ? А туда копируете прямо из браузера ? Если не надоело попробуйте еще так CREATE TABLE #temp1(my_sp3027 char(1) COLLATE Cyrillic_General_CI_AI, op_sign int) ну и так далее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 13:24 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
where Bizon..ra1130.sp3027 = 'П' or Bizon..ra1130.sp3027 = 'Р' .... Выполняю в QA всё работает !!! Если не надоело попробуйте еще так CREATE TABLE #temp1(my_sp3027 char(1) COLLATE Cyrillic_General_CI_AI, op_sign int) пробовал - всё бестолку... правда после my_sp3027 char(1) - запятую ставил (так?) иначе - ругается. Мне тут ещё сказали, что м.б. это потому что 2000 ставился не поверх 7.0 ??? Вот что мне прислали: These server configuration options are not supported in SQL Server 2000. default sortorder id resource timeout extended memory size spin counter language in cache time slice language neutral full-text unicode comparison style max async IO unicode locale id может, у вас default sortorder id стоит? сортордер ид в семерке указывается в свойствах базы а в 2000 при установке что-то спрашивается мей би, в этом и есть причина. Когда ставишь 2000 поверх 7.0, оно спрашивает, какие ему установки использовать, и предупреждает, что для совместимости надо юзать вот это, а не это. Что Вы думаете по этому поводу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 13:34 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Это я тормоз (вот что значит использовать Copy+Paste) Если сравнение идет в SUM(), то таблица #temp1 не нужна select Bizon..sc33.Descr, sum(Bizon..ra1130.sp1133 * CASE WHEN Bizon..ra1130.sp3027 IN('П', 'Р') THEN -1 WHEN Bizon..ra1130.sp3027 IN('З') THEN 1 ELSE 0 END) as Kol, sum(Bizon..ra1130.sp2655 * CASE WHEN Bizon..ra1130.sp3027 IN('П', 'Р') THEN -1 WHEN Bizon..ra1130.sp3027 IN('З') THEN 1 ELSE 0 END) as Summ FROM Bizon..RA1130 INNER JOIN Bizon.._1SJOURN ON Bizon..RA1130.IDDOC = Bizon.._1SJOURN.IDDOC INNER JOIN Bizon..sc33 ON Bizon..RA1130.sp1131 = Bizon..sc33.[id] WHERE DATEDIFF(dd, LEFT(Bizon.._1SJOURN.DATE_TIME_IDDOC, 8 ), @current_date) < 7 Group By Bizon..sc33.Descr правда после my_sp3027 char(1) - запятую ставил (так?) иначе - ругается. Не понял зачем это У вас такой скрипт работает ? А русские буквы правильно отображаются ? CREATE TABLE #temp1(my_sp3027 nchar(1), op_sign int) INSERT #temp1 VALUES(N'П', -1) INSERT #temp1 VALUES(N'Р', -1) INSERT #temp1 VALUES(N'З', 1) select * from #temp1 drop table #temp1 а такой ? CREATE TABLE #temp1(my_sp3027 char(1) COLLATE Cyrillic_General_CI_AI, op_sign int) INSERT #temp1 VALUES(N'П', -1) INSERT #temp1 VALUES(N'Р', -1) INSERT #temp1 VALUES(N'З', 1) select * from #temp1 drop table #temp1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 13:48 |
|
||
|
select с union и Group By
|
|||
|---|---|---|---|
|
#18+
Последний запрос сработал, СПАСИБО!!! С меня пиво Но вот чудо: проверил ВСЕ вышенаписанные Вами запросы в SQL 7.0 - ОНИ РАБОТАЮТ !!!!!!!!!!!!!!!!! ВСЕ И ВЫДАЮТ ПРАВИЛЬНЫЕ РЕЗУЛЬТАТЫ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Почему ??? Очень интересно из-за чего столько времени потеряли ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2002, 13:59 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32024498&tid=1823649]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 431ms |

| 0 / 0 |
