powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select с union и Group By
25 сообщений из 28, страница 1 из 2
select с union и Group By
    #32024432
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть выборка с использованием оператора 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)
...
Рейтинг: 0 / 0
select с union и Group By
    #32024433
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select t1 from
(select t1
...............
UNION
select t2
...............
) AS x
Group By t1
...
Рейтинг: 0 / 0
select с union и Group By
    #32024437
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот полностью мой запрос:
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.
В чём проблема ???
...
Рейтинг: 0 / 0
select с union и Group By
    #32024439
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
select с union и Group By
    #32024440
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо, забыл 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 раз ?
Если ДА, то как его включить в проверку по каждой строке таблицы ???
...
Рейтинг: 0 / 0
select с union и Group By
    #32024442
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше так


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
...
Рейтинг: 0 / 0
select с union и Group By
    #32024444
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ДА, то как его включить в проверку по каждой строке таблицы ???
Конечно один раз - это же ведь не часть запроса.

В каком формате у вас записаны данные в Bizon.._1SJOURN.DATE_TIME_IDDOC ?
...
Рейтинг: 0 / 0
select с union и Group By
    #32024445
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но последняя конструкция дает ошибку :
Server: Msg 446, Level 16, State 9, Line 12
Cannot resolve collation conflict for equal to operation.

И ещё:
ответьте плз. на мой вопрос по поводу условия (предыдущий)...
...
Рейтинг: 0 / 0
select с union и Group By
    #32024447
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но последняя конструкция дает ошибку :
Server: Msg 446, Level 16, State 9, Line 12
Cannot resolve collation conflict for equal to operation.

И как мой ИФ включить в запрос ???
...
Рейтинг: 0 / 0
select с union и Group By
    #32024449
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот формат;
DATE_TIME_IDDOC
-----------------------
200112313KLMO0 1
200112313KJHI8 2
200112313KHCCG 3
200112313KF76O 4
200112313KD20W 5
Для этого я его и преобразовываю ф формат даты...
...
Рейтинг: 0 / 0
select с union и Group By
    #32024453
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
select с union и Group By
    #32024454
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выводит ошибку :
Server: Msg 446, Level 16, State 9, Line 9
Cannot resolve collation conflict for equal to operation.
...
Рейтинг: 0 / 0
select с union и Group By
    #32024456
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, а какого типа у вас поле Bizon..ra1130.sp3027 и какой у него collation ?
...
Рейтинг: 0 / 0
select с union и Group By
    #32024458
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sp3027
------
Г
Г
Т.е поле символьного типа, длина 6.
Извините, поехал домой. Буду завтра на связи в 9.00.
Если есть ICQ - мой номер: 128053033.
Хотелось бы завтра возобновить беседу...
С уважением. Андрей
...
Рейтинг: 0 / 0
select с union и Group By
    #32024459
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Символьные поля бывают разные: 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'
...
Рейтинг: 0 / 0
select с union и Group By
    #32024498
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тип --> 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
как посмотреть коллэйшион отдельной таблицы - не знаю
...
Рейтинг: 0 / 0
select с union и Group By
    #32024530
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поле Bizon..ra1130.sp3027 - имеет такой-же коллейшион, (дафаулт).
...
Рейтинг: 0 / 0
select с union и Group By
    #32024547
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А 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
...
Рейтинг: 0 / 0
select с union и Group By
    #32024549
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте ради интереса еще вот такой вариант


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
...
Рейтинг: 0 / 0
select с union и Group By
    #32024550
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итог тот-же:
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)
...
Рейтинг: 0 / 0
select с union и Group By
    #32024554
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последний запрос тоже ничего не дал, пишет:
Server: Msg 2715, Level 16, State 7, Line 1
Column or parameter #2: Cannot find data type compatibility_106_409_30003.
...
Рейтинг: 0 / 0
select с union и Group By
    #32024562
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понимаю.
Как же у вас работает сравнение в вашем оригинальном запросе ?
... where Bizon..ra1130.sp3027 = 'П' or Bizon..ra1130.sp3027 = 'Р' ....

Где вы выполняете предложенные скрипты ? В QA ? А туда копируете прямо из браузера ?

Если не надоело попробуйте еще так
CREATE TABLE #temp1(my_sp3027 char(1) COLLATE Cyrillic_General_CI_AI, op_sign int)
ну и так далее
...
Рейтинг: 0 / 0
select с union и Group By
    #32024565
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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, оно спрашивает, какие ему установки использовать, и предупреждает, что для совместимости надо юзать вот это, а не это.


Что Вы думаете по этому поводу ?
...
Рейтинг: 0 / 0
select с union и Group By
    #32024572
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я тормоз (вот что значит использовать 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
...
Рейтинг: 0 / 0
select с union и Group By
    #32024575
quickdeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последний запрос сработал, СПАСИБО!!! С меня пиво
Но вот чудо: проверил ВСЕ вышенаписанные Вами запросы в SQL 7.0 - ОНИ РАБОТАЮТ !!!!!!!!!!!!!!!!!
ВСЕ И ВЫДАЮТ ПРАВИЛЬНЫЕ РЕЗУЛЬТАТЫ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Почему ???
Очень интересно из-за чего столько времени потеряли ...
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select с union и Group By
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]