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

Откуда: Armenia
Сообщений: 573
Привет всем.

Есть таблица

create table tbl (val int not null,
		fld01 int not null check (fld01>0 and fld01<=4),
		fld02 int not null check (fld02>0 and fld02<=10))

Нужно трансформировать tbl таким образом что бы получилось таблица с 4-мя
колонками и 10-ю строками, где 1-ая колонка содержит суммa val тех строк, где fld01=1, 2-ая колонка - сумма val, где fld01 = 2, итд.
В строке 1 сумма тех val у которых fld02 = 1,....

Вариант с 4-мя join - ами тривялен. Хочется чего нит покруче.
Спосибо.
6 авг 04, 19:22    [865947]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
select fld02, Sum(case when fld01=1 then val end)
	, Sum(case when fld01=2 then val end)
	, Sum(case when fld01=3 then val end)
	, Sum(case when fld01=4 then val end)
group by fld02
ps 10 строк получится только если в fld02 есть все 10 значений
6 авг 04, 19:34    [865958]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
Вообше то это упрошенный модель задачи, сеичас попрубую перевести на рельную задачу.
6 авг 04, 19:50    [865976]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
case when fld01=1 then val end
неподойдет так как условие fld01 = 1 получается с подзапросм
типа fld01 exists (select ....).

Могу привести болле детальную постановку задачи.
6 авг 04, 20:13    [866016]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
приведите структуру таблицы, исходные данные и что хотелось бы получить, будет проще



для спящего время бодрствования равносильно сну
7 авг 04, 17:45    [866592]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
Структуры таблиц таковы

create table payers_list (
		payer_id int identity (1,1) not null,
		payer_type_id bit not null
	constraint PK_payer_id primary key (payer_id))

create table prv_payers_info (
		prv_payer_id int not null,
		s_code char(6) not null,
		b_code char(7) not null,
		masn_id int not null
	constraint U_prv_payer_id unique (prv_payer_id),
	constraint FK_prv_payer_id foreign key (prv_payer_id) references payers_list(payer_id))

create table pub_payers_info (
		pub_payer_id int not null,
		na_code char(12) not null,
		masn_id int not null
	constraint U_pub_payer_id unique (pub_payer_id),
	constraint FK_pub_payer_id foreign key (pub_payer_id) references payers_list(payer_id))


create table senders_list (
		sender_id int not null,
		sender_org_name varchar(50) not null,
	constraint PK_sender_id primary key (sender_id))

create table payments_list (
		payment_id int identity(1,1) not null,
		payer_id int not null,
		pay_amount numeric (16,2) not null,
		payment_date datetime not null,
		sender_id int not null
	constraint PK_payment_id primary key (payment_id),
	constraint FK_payer_id foreign key (payer_id) references payers_list(payer_id),
	constraint FK_sender_id foreign key (sender_id) references senders_list(sender_id))

Таблица payments_list хранит информацию о платежах абонетов системы.
payers_list обединяет плательщиков которых я разделил на две категории
(payer_type_id) и информацию о них сохранил в двух таблицах
(prv_payers_info и pub_payers_info). Плательщики также разделены по региональному признаку (masn_id). Так как информацию о сборе денег
получаю от разных бакнов мне понадобился таблица senders_list.

Нужно составлять запрос который выдал сумму плотежей сгрупиранной
по региональному признаку плательщика (masn_id) в каждой колонке
имея сумму от разных банков (1.количество банков определена, 2. неопределена).

Заранее спосибо.
10 авг 04, 18:16    [872342]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а теперь как это привязать к вашему первому посту?


для спящего время бодрствования равносильно сну
10 авг 04, 18:25    [872369]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
Ну примерно так.

Все строки из payments_list пападают в суммы по двум признакам
1. Плательщик принадлежит к определенному региону (masn_id) который
определяет строку.
2. Выплата осушествлена в определенном банке (sender_id) который
определяет колонку.
10 авг 04, 18:40    [872419]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
Ну что молчим?
10 авг 04, 20:14    [872551]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить