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

Откуда:
Сообщений: 1368
Есть данные:
id cur pric
11 1 10
12 1 12
12 2 13

как получить в виде
id pric(1/2)
11 10/0
12 12/13
?
так понимаю соединить само на себя , но как
16 мар 16, 17:29    [18939560]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4972
смотрю_тут
Есть данные:
id cur pric
11 1 10
12 1 12
12 2 13

как получить в виде
id pric(1/2)
11 10/0
12 12/13
?
так понимаю соединить само на себя , но как

1) pric(1/2) - это одна колонка?
2) Данных всегда может быть только 2 значения через /?

А так в общем: либо через курсор, либо почитать про агрегацию строк другими способами
https://www.sql.ru/forum/371885/konkatenaciya-strok-v-odnom-zaprose
16 мар 16, 17:38    [18939630]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Что такое curr?
16 мар 16, 17:38    [18939635]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
смотрю_тут
Member

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

1)да , pric(1/2) - -это одна колонка,
2)да, данные не более 2, но может быть одно пустое, как в примере id =11
16 мар 16, 17:43    [18939664]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
если всегда cur <=2
select
 t1.ID
,[Pric (1/2)] = CAST( t1.pric as varchar(10)) +'/' + cast(ISNULL(select pric from table where id =t1.ID and cur =2),0) as varchar(10))
from table t1
where t1.cur =1
16 мар 16, 17:46    [18939693]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
_djХомяГ
Guest
Для версии >=2012
;with cte (id,cur,pric)
as
(
     select 11,1,10
	 union all
	 select 12,1,12
	 union all
	 select 12,2,13

)
select *,convert(varchar,pric)+'/'+convert(varchar,isnull(lead(pric) over (partition by id order by cur),0)) 
from cte
16 мар 16, 17:48    [18939713]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20960
Возьмите две копии таблицы, какие проблемы? типа
SELECT COALESCE (t1.id, t2.id) id, COALESCE(t1.pric, 0), COALESCE(t2.pric, 0)
FROM table t1 FULL OUTER JOIN table t2 
ON t1.id = t2.id AND t1.cur = 1 AND t2.cur = 2
16 мар 16, 17:49    [18939722]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
select
 isnull(t1.id, t2.id), cast(isnull(t1.pric, 0) as varchar(10)) + '/' + cast(isnull(t2.pric, 0) as varchar(10))
from
 (select id, pric from MyTable where cur = 1) t1 full join
 (select id, pric from MyTable where cur = 2) t2 on t2.id = t1.id;
16 мар 16, 17:51    [18939736]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
declare @t table (id int, cur int, pric int)

insert into @t (id, cur, pric)
values (11, 1, 10), (12, 1, 12), (12, 2, 13)

SELECT 
	A.id,
	CONVERT(varchar(10), A.[1]) + '/' +  CONVERT(varchar(10), A.[2]) as [pric(1/2)]	
FROM
(select 
	T.id, 
	SUM(CASE WHEN T.cur = 1 THEN T.pric ELSE 0 END) as [1], 
	SUM(CASE WHEN T.cur = 2 THEN T.pric ELSE 0 END) as [2]
from @t T
group by id) A
16 мар 16, 17:55    [18939765]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
мдя, ТС 4 года на форуме.... и такие вопросы
Може были правы в соседней ветке про нынешнее образование....
16 мар 16, 17:55    [18939769]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
Maxx
если всегда cur <=2
select
 t1.ID
,[Pric (1/2)] = CAST( t1.pric as varchar(10)) +'/' + cast(ISNULL(select pric from table where id =t1.ID and cur =2),0) as varchar(10))
from table t1
where t1.cur =1

это не подойдет, т.к t1.cur =1 не всегда есть, т.е может быть 0/ значение
16 мар 16, 18:01    [18939813]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
смотрю_тут
о не подойдет, т.к t1.cur =1 не всегда есть, т.е может быть 0/ значение

Ну так ,навреное надо озвучивать сразу условие задача целиком ?
16 мар 16, 18:03    [18939830]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Glory
Member

Откуда:
Сообщений: 104760
PIVOT еще есть
16 мар 16, 18:11    [18939895]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Megabyte
либо через курсор,
Что ж за день-то такой сегодня!
16 мар 16, 18:58    [18940151]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
iap
Megabyte
либо через курсор,
Что ж за день-то такой сегодня!

ага, блин,

сервер 2012
через cte пробую но не получается,

уточнение по задаче cur для id может быть и для 1 и 2, а может только одна строка для 1 или 2
id cur pric
11 1 10
12 1 12
12 2 13
13 2 25

результат
id pric
11 10/0
12 12/13
13 0/25
16 мар 16, 19:09    [18940201]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Glory
Member

Откуда:
Сообщений: 104760
смотрю_тут
через cte пробую но не получается,

какой еще cte
16 мар 16, 19:13    [18940224]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Dewaltshop
Member

Откуда:
Сообщений: 2
смотрю_тут
результат
id pric
11 10/0
12 12/13
13 0/25


Лучше расскажите своими словами как в данном случае формируются или вычисляются данные для поля (колонки) pric, так как по вашему описанию задачи личто я - ничего не понял.
16 мар 16, 20:10    [18940349]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
o-o
Guest
Капец, товарищи.
4 поста назад озвучено: PIVOT

К сообщению приложен файл. Размер - 39Kb
16 мар 16, 20:28    [18940389]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
смотрю_тут
13 2 25


чем мой вариант то не подошёл?

declare @t table (id int, cur int, pric int)

insert into @t (id, cur, pric)
values (11, 1, 10), (12, 1, 12), (12, 2, 13), (13, 2, 25)

SELECT 
	A.id,
	CONVERT(varchar(10), A.[1]) + '/' +  CONVERT(varchar(10), A.[2]) as [pric(1/2)]	
FROM
(select 
	T.id, 
	SUM(CASE WHEN T.cur = 1 THEN T.pric ELSE 0 END) as [1], 
	SUM(CASE WHEN T.cur = 2 THEN T.pric ELSE 0 END) as [2]
from @t T
group by id) A
17 мар 16, 12:04    [18942295]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
o-o
Guest
Konst_One,
наверное тем, что это все тот же PIVOT
17 мар 16, 12:12    [18942342]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
чем он так ТС-у не приглянулся то?
17 мар 16, 12:13    [18942346]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Glory
Member

Откуда:
Сообщений: 104760
Konst_One
чем он так ТС-у не приглянулся то?

ТС хочет cte и selfjoin )
17 мар 16, 12:16    [18942359]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Konst_One
Member

Откуда:
Сообщений: 11561
какой нынче ТС пошёл привередливый =)
17 мар 16, 12:21    [18942395]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
Konst_One
какой нынче ТС пошёл привередливый =)

да нет все , спасибо всем. взял pivot

просто не до конца разбираюсь как работать с PIVOT,
если взять таблицу @t (id, cur, pric) с еще одним столбцом, то оказывается и результат другой, хотя этот столбец не участвую в запросе
а так нет практики программирования
17 мар 16, 12:25    [18942422]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать данные  [new]
Glory
Member

Откуда:
Сообщений: 104760
смотрю_тут
то оказывается и результат другой, хотя этот столбец не участвую в запросе

Вы думаете, что не участвует или не участвует ?
17 мар 16, 12:28    [18942439]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить