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

Откуда:
Сообщений: 4
Здравствуйте! Я совсем недавний пользователь. И уже второй день пытаюсь решить вопрос, но не выходит.

Есть таблица

ID TUR DEN COST
1 1 1 100
1 1 3 100
1 1 5 150
2 3 2 100

Как сделать таблицу:

ID     TUR    DEN    COST
1 1 13 100
1 1 5 150
2 3 2 100


Если все поля кроме DEN совпадают, то объединить в одну строку с объединением значений DEN
И сильно ли это отразится на быстродействии?
Спасибо огромное!
2 дек 12, 22:49    [13565721]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
qwerty112
Guest
veana
И сильно ли это отразится на быстродействии?

на сферическом кол-ве записей - средне :)

по сабжу - https://www.sql.ru/faq/faq_topic.aspx?fid=130
2 дек 12, 22:55    [13565738]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
veana
Member

Откуда:
Сообщений: 4
qwerty112, я видела уже эту статью, но у меня ничего не вышло
3 дек 12, 00:59    [13566045]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
qwerty112
Guest
veana
qwerty112, я видела уже эту статью, но у меня ничего не вышло

бывает, чо ...
главное что б с первыми блюдами всё получалось, - это важнее !

---

вы вот к чему это всё написали ? вам посочувствовать нужно ? .. ну так - сочувствуем, ага !
вот, ходи сюда - Рекомендации по оформлению сообщений в форуме
читай пп. 4, 6
делай выводы, и возвращайся
3 дек 12, 01:08    [13566062]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
qwerty112
Guest
declare @t table (ID  int,   TUR  int,   DEN  int,   COST int)

insert into @t
(ID  ,   TUR   ,  DEN  ,   COST)

select 1,       1,      1,       100 union all
select 1,       1,      3,       100 union all
select 1,       1,      5,       150 union all
select 2,       3,      2,       100

select distinct ID  ,   TUR  ,    COST,
replace((select cast(DEN as varchar) as 'data()' from @t t2 where t1.ID=t2.ID and t1.TUR=t2.TUR and t1.COST=t2.COST for xml path('')), ' ', '') as xz
from @t t1

ID          TUR         COST        xz
----------- ----------- ----------- ----------- 
1           1           100         13
1           1           150         5
2           3           100         2
3 дек 12, 01:22    [13566103]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
veana
Member

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

Версия - 5.1.44

create table `tbl1` (ID int, TUR varchar(10), DEN varchar(10), COST int)
insert into `tbl1`  (ID, TUR, DEN, COST) select ID, TUR, DEN, COST from `table1` where <условие>
create table `tbl2` (ID int, TUR varchar(10), XZ varchar(10), COST int)
insert into `tbl2`  (ID, TUR, XZ, COST) select distinct ID, TUR, COST,
replace (((select DEN from `tb1` t2 where t1.ID=t2.ID and t1.TUR=t2.TUR and t1.COST=t2.COST for xml path(' ')), ' ', ' ') as XZ from `tbl1`t t1) FROM `tbl1`


В итоге в tbl2 поле XZ = NULL

Пойду-ка я лучше варить борщ что ли :)
3 дек 12, 05:05    [13566214]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
Гость333
Member

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

Я вижу минимум 4 отличия, а вы?

qwerty112
replace((select cast(DEN as varchar) as 'data()' from @t t2 where t1.ID=t2.ID and t1.TUR=t2.TUR and t1.COST=t2.COST for xml path('')), ' ', '') as xz

veana
replace (((select DEN from `tb1` t2 where t1.ID=t2.ID and t1.TUR=t2.TUR and t1.COST=t2.COST for xml path(' ')), ' ', ' ') as XZ
3 дек 12, 09:37    [13566669]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Гость333,

У нее одно большое отличие -- сервер MySQL.
3 дек 12, 10:31    [13566891]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
Добрый Э - Эх
Guest
veana

Версия - 5.1.44

Пойду-ка я лучше варить борщ что ли :)
Путаем MS SQL и MySQL? ;)
В MySQL всё гораздо банальнее: group_concat тебе в помощь.
Небольшой пример
3 дек 12, 11:05    [13567113]     Ответить | Цитировать Сообщить модератору
 Re: Объединение строк  [new]
veana
Member

Откуда:
Сообщений: 4
Всем огромное спасибо!

Вот решение:
INSERT INTO `tbl2` (id, tur, den, cost) SELECT id, tur, GROUP_CONCAT(DISTINCT den SEPARATOR ''), cost FROM `tbl1` GROUP BY id, tur
3 дек 12, 21:06    [13571327]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить