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

Откуда:
Сообщений: 6
Доброго времени суток.

Собственно есть запрос

SELECT COUNT(FR_GROUP_RES) AS [COUNT], FR_GROUP_RES 
  FROM Resource
  WHERE ID = '7328BBB2-82F6-4CA6-90F7-142748740DB9'
GROUP BY FR_GROUP_RES


который возвращает следующий результат:
COUNTFR_GROUP_RES
16TN
1TN;EKT
3EKT
0NULL
24EKS
9EKS;TN
1TN;EKS
1EKS;TN;EKT
1SIT

необходимо что - то сделать с запросом, чтобы результат был следующим:
COUNTFR_GROUP_RES
35EKS
5EKT
29Другие организации


Даже не знаю с чего начать. Подскажите что - нибудь или в какую сторону двигаться. Заранее благодарю.
6 июл 12, 11:52    [12827557]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Это уже не первая тема про парсинг строк с точкой с запятой сегодня.
Вы в одном классе что ли учитесь?
6 июл 12, 11:57    [12827604]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
qwerty112
Guest
Floop
необходимо что - то сделать с запросом, чтобы результат был следующим:
COUNTFR_GROUP_RES
35EKS
5EKT
29Другие организации

как получилось 29 ?

select FR_GROUP_RES, COUNT
from 

(select
sum(case when ';'+FR_GROUP_RES+';' like '%;EKS;%' then COUNT end) as EKS, 
sum(case when ';'+FR_GROUP_RES+';' like '%;EKT;%' then COUNT end) as EKT, 
sum(case when ';'+FR_GROUP_RES+';' not like '%;EKS;%' and ';'+FR_GROUP_RES+';' not like '%;EKT;%' then COUNT end) as [Другие организации]
from @t) a

unpivot (FR_GROUP_RES for COUNT in (EKS, EKT, [Другие организации])) as unpvt

FR_GROUP_RES COUNT
------------ ------------------------
35           EKS
5            EKT
17           Другие организации
6 июл 12, 12:25    [12827835]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
qwerty112
Guest
qwerty112
как получилось 29 ?

сорри, "дошло",
вариант - "снимается", нужно парсить
6 июл 12, 12:28    [12827865]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
qwerty112
Guest
вот, всё таки, без парсинга можно, но "страшненько"
+
declare @t table ([COUNT] int,FR_GROUP_RES varchar(20))

insert into @t (COUNT,FR_GROUP_RES)
select 16,'TN' union all
select 1,'TN;EKT' union all
select 3,'EKT' union all
select 0,NULL union all
select 24,'EKS' union all
select 9,'EKS;TN' union all
select 1,'TN;EKS' union all
select 1,'EKS;TN;EKT' union all
select 1,'SIT'

select FR_GROUP_RES, COUNT
from 

(select
sum(case when ';'+FR_GROUP_RES+';' like '%;EKS;%' then COUNT end) as EKS, 
sum(case when ';'+FR_GROUP_RES+';' like '%;EKT;%' then COUNT end) as EKT, 
sum(COUNT * (len(FR_GROUP_RES)-len(replace(FR_GROUP_RES,';',''))+1) 
-case when ';'+FR_GROUP_RES+';' like '%;EKS;%' then COUNT else 0 end
-case when ';'+FR_GROUP_RES+';' like '%;EKT;%' then COUNT else 0 end
) as [Другие организации]
from @t) a

unpivot (FR_GROUP_RES for COUNT in (EKS, EKT, [Другие организации])) as unpvt

FR_GROUP_RES COUNT
------------ -------------------------
35           EKS
5            EKT
29           Другие организации
6 июл 12, 12:53    [12828076]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Floop
Member

Откуда:
Сообщений: 6
qwerty112,

Спасибо, надо понять теперь как это работает
6 июл 12, 13:17    [12828305]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить