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

Откуда: Волжский
Сообщений: 235
Подскажите, пожалуйста, как можно из таблицы:
DECLARE @t AS TABLE (id INT,param VARCHAR)

INSERT INTO @t
SELECT 1,'1'
UNION ALL
SELECT 2,'2' 
UNION ALL
SELECT 3,'3' 
UNION ALL
SELECT 4,'4' 

Получить такую:
param
1+3
2+4

(т.е. сложить через один)

одним запросом

(записи всегда 4)
_____________________________________
Access 2003 adp, MS SQL server 2005
26 окт 09, 13:54    [7838404]     Ответить | Цитировать Сообщить модератору
 Re: Частный случай сложения символьных полей  [new]
iljy
Member

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

DECLARE @t AS TABLE (id INT primary key,param VARCHAR)

INSERT INTO @t
SELECT 1,'1'
UNION ALL
SELECT 2,'2' 
UNION ALL
SELECT 3,'3' 
UNION ALL
SELECT 4,'4' 

select MAX(case (id+1)/2 when 1 then param end) + '+' + MAX(case (id+1)/2 when 2 then param end)
from @t
group by id%2


select (select param from @t where id = 1) + '+' + (select param from @t where id = 3)
	union all
select (select param from @t where id = 2) + '+' + (select param from @t where id = 4)

26 окт 09, 14:19    [7838673]     Ответить | Цитировать Сообщить модератору
 Re: Частный случай сложения символьных полей  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
iljy,
спасибо!
Да уж, че то я зациклился на for xml ))
26 окт 09, 14:23    [7838726]     Ответить | Цитировать Сообщить модератору
 Re: Частный случай сложения символьных полей  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
А без столбца id это реально сделать?
DECLARE @t AS TABLE (param VARCHAR)

INSERT INTO @t
SELECT '1'
UNION ALL
SELECT '2' 
UNION ALL
SELECT '3' 
UNION ALL
SELECT '4' 

Я думал вместо id использовать row_number(),
но оказалось, что его ни в контексте другой агрегатной функции нельзя использовать, ни в group by ((
_____________________________________
Access 2003 adp, MS SQL server 2005
26 окт 09, 15:00    [7839136]     Ответить | Цитировать Сообщить модератору
 Re: Частный случай сложения символьных полей  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
и, естественно, не опираясь на значения param (там что угодно может быть)
_____________________________________
Access 2003 adp, MS SQL server 2005
26 окт 09, 15:02    [7839144]     Ответить | Цитировать Сообщить модератору
 Re: Частный случай сложения символьных полей  [new]
Supra93
Member

Откуда:
Сообщений: 8174
Arsave
А без столбца id это реально сделать?
DECLARE @t AS TABLE (param VARCHAR)

INSERT INTO @t
SELECT '1'
UNION ALL
SELECT '2' 
UNION ALL
SELECT '3' 
UNION ALL
SELECT '4' 

Я думал вместо id использовать row_number(),
но оказалось, что его ни в контексте другой агрегатной функции нельзя использовать, ни в group by ((
_____________________________________
Access 2003 adp, MS SQL server 2005


DECLARE @t AS TABLE (param VARCHAR)

INSERT INTO @t
SELECT '1'
UNION ALL
SELECT '2' 
UNION ALL
SELECT '3' 
UNION ALL
SELECT '4';

with cte as (select param,[id]= row_number() over (order by param asc) from @t)
select MAX(case (id+1)/2 when 1 then param end) + '+' + MAX(case (id+1)/2 when 2 then param end)
from cte
group by id%2
26 окт 09, 15:08    [7839198]     Ответить | Цитировать Сообщить модератору
 Re: Частный случай сложения символьных полей  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
Supra93,
Спасибо!
26 окт 09, 15:35    [7839402]     Ответить | Цитировать Сообщить модератору
 Re: Частный случай сложения символьных полей  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
Arsave,

в качестве бонуса к предыдущим вариантам возьмите еще один:
declare @t as table (param varchar)

insert into @t
select '1'
union all
select '2' 
union all
select '3' 
union all
select '4'

select result
from(
select c1=[1]+'+'+[3],c2=[2]+'+'+[4] 
  from ( select param,r=row_number()over(order by param) from @t ) t 
 pivot ( max(param) for r in ([1],[2],[3],[4]) ) pv
)x
unpivot ( result for x in (c1,c2) )u
result
1+3
2+4
26 окт 09, 16:23    [7839778]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить