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

Откуда: Москва
Сообщений: 323
В общем, такая проблема: надо сгруппировать выборку по полю, получаемому в результате подзапроса. Поиск что-то ничего не дал.
Есть похожие проблемы у других, но не совсем.

Есть запрос из нескольких таблиц, со сложной логикой подзапроса, в котором вытягиваются названия пользователей:

SELECT  ef.eMapName,
		iss.cmb_Shop,
		em.eLocaleID,
		(SELECT [eUserName]
		  FROM xxx
		  WHERE eAttribute = 'Department' AND eValue = eg.cmb_Dep		  
                              INTERSECT
		  SELECT [eUserName]
		  FROM xxx
		  WHERE eAttribute = 'Shop'   AND eValue = eg.cmb_Shop
		  INTERSECT
		  SELECT [eUserName]
		  FROM xxx
		  WHERE eAttribute = 'Subdepartment' AND eValue = eg.cmb_Subdep) as users,
		  ef.EFOLDERID
--COUNT(*) TOTAL,

--SUM(case when ef.eArchived = 1 then 1 else 0 end)                                  end,
--SUM(case when iss.DT_Termin > Sysdatetime() then 1 else 0 end)              over,
--SUM(case when iss.int_Status = 1 then 1 else 0 end)                                 issued,
--SUM(case when iss.int_Status > 1 and iss.int_Status < 5 then 1 else 0 end) work,
--SUM(case when es.eStagename = 'GS_Escalation' then 1 else 0 end)         escal


FROM [Metastorm].[dbo].eFolder    AS ef INNER JOIN
     [Metastorm].[dbo].eMap       AS em ON ef.eMapName  = em.eMapName 
	               INNER JOIN
     [Metastorm].[dbo].eStage     AS es ON  ef.eMapName = es.eMapName 
		em.eMapName = es.eMapName 
		INNER JOIN
     [Metastorm].[dbo].Issues AS iss
		ON ef.eFolderID = eg.eFolderID 
		WHERE em.eLocaleID      = 'Default'
AND ef.eStageName     IS NOT NULL
AND es.eLocaleID      = 'Default'
AND is.cmb_Shop = 'YYYYYY'
--GROUP BY
--ef.eMapName,
--iss.cmb_Shop,
--em.eLocaleID
--ea.eUserName

Необходимо сгрупиировать по полю users. Потому что, если не сгруппировать, то ругаеццо, есессно, так как поле есть в select clause
А если сгруппировать, то ругаеццо, что не находит поле users

Пробовал и через CTE делать, и через конструкцию
SELECT * FROM
(SELECT  ef.eMapName,
		eg.cmb_Shop,
		em.eLocaleID,
		(SELECT [eUserName]
                             INTERSECT...
                             SELECT [eUserName]...) as users
)
GROUP BY ...users

Все без толку. Везде ругается на синтаксис.
Как такое реализовать?
17 фев 14, 18:08    [15578941]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Dezmond,

Убирайте ваш подзапрос в outer apply и группируйте
17 фев 14, 18:19    [15578986]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
Dezmond
Member

Откуда: Москва
Сообщений: 323
WarAnt
Dezmond,
Убирайте ваш подзапрос в outer apply и группируйте


Но при outer apply надо создавать табличную функцию, полномочий на создание которой нет.
Другие варианты решения?
18 фев 14, 11:54    [15581325]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dezmond
Но при outer apply надо создавать табличную функцию,

С чего вдруг "надо"?
18 фев 14, 11:56    [15581341]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dezmond
Другие варианты решения?

Вложенные запросы
select tab_name, col_name
from (
select name as tab_name, (select top 1 name from syscolumns b where a.id = b.id) as col_name 
from sysobjects a) x
group by tab_name, col_name
18 фев 14, 12:00    [15581374]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
Dezmond
Member

Откуда: Москва
Сообщений: 323
Glory
С чего вдруг "надо"?

Ну, по крайней мере, я только такие примеры с apply видел.
18 фев 14, 12:03    [15581405]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dezmond
Ну, по крайней мере, я только такие примеры с apply видел.

От "Я видел только это" до "надо" очень большое расстояние
18 фев 14, 12:06    [15581436]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
Dezmond
Member

Откуда: Москва
Сообщений: 323
UPD: полномочия есть, но все-таки интересно, как такое сделать дедовскими методами. На MS SQL <2005,
например.
Glory
select tab_name, col_name
from (
select name as tab_name, (select top 1 name from syscolumns b where a.id = b.id) as col_name
from sysobjects a) x
group by tab_name, col_name

Хм, такой синтаксис пробовал, но ругалось. Надо еще раз попробобовать - может где ошибся.
18 фев 14, 12:09    [15581460]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по результату подзапроса  [new]
Dezmond
Member

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

Glory
Dezmond
Другие варианты решения?

Вложенные запросы
select tab_name, col_name
from (
select name as tab_name, (select top 1 name from syscolumns b where a.id = b.id) as col_name 
from sysobjects a) x
group by tab_name, col_name


Благодарствую. Вот так получилось. Руки мои кривые
18 фев 14, 12:35    [15581651]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить