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

Откуда:
Сообщений: 6
Все доброго времени суток. Спецы помогите плиз, сделал вот такой запрос:
select f.num, f.fio, f.summa, f.summa_opl AS September, s.summa_opl AS October from archive_opl AS f inner join archive_opl AS s
on (f.NUM=s.NUM) where f.CODE2='092012' and s.CODE2='102012'
order by f.NUM

Кратко объясню, запрос производит выбор из архивной таблицы оплаты клиентов по месяцам. В моем случае за Сентябрь и Октябрь. Все работает корректно, но за исключением одного момента. Если, например, оплата каким-то клиентом была произведена с октября а не с сентября, (т.е. в сентябре его не было и следовательно записи по нему нет), то такая запись не выводится! Мне бы хотелось, чтобы в месяце, в в котором у клиента не было оплаты (напр. в сентбяре) он выводил например NULL, т.е. запись должна попадать в результат выбора в любом случае. Может кто сможет подсказать, что можно сделать?
Заранее спасибо!
23 дек 13, 14:05    [15333974]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
сделайте таблицу с месяцами и присоединяйте к ней левым джойном archive_opl .
23 дек 13, 14:10    [15334000]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
prog882
Guest
soi,

select num,fio,summa,
case when month(code2) = 1 then summa_opl else 0 end as January,
case when month(code2) = 2 then summa_opl else 0 end as February,
case when month(code2) = 3 then summa_opl else 0 end as March,
...
from archive_opl
order by num
23 дек 13, 14:32    [15334188]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
soi
Member

Откуда:
Сообщений: 6
prog882, спасибо за идею, сделал как вы предлагали:
select num,fio,summa,
case when code2 ='092012' then summa_opl else 0 end as september,
case when code2 ='102012'  then summa_opl else 0 end as october
from archive_opl where CODE2='092012' or CODE2='102012'
order by num

кое-что стало вырисовываться, но все равно не совсем что надо.
Вот результат моего запроса:
num fio summa september october
4 Толстова Анастасия Леонидовна 1400 0 1400
4 Толстова Анастасия Леонидовна 1400 1400 0
5 Толстоносов Альберт Дмитриевич 1400 2800 0
5 Толстоносов Альберт Дмитриевич 0 0 0
6 Богдя Данил Иванович 1400 0 1400
6 Богдя Данил Иванович 1400 1400 0

Видно, что запрос выводит по две записи каждого оплатившего клиента, одна запись относится к сентябрю, другая к октябрю. Если выборка будет производиться, например по 4 или 5 месяцам, соответственно будет по 4 или 5 записей каждого клиента, это не удобно! Как сделать, чтобы записи выводились одной строкой? что-то не доходит. Может я уже совсем себе голову забил этим запросом и не вижу простого решения? Хелп плиз кто знает?
Хотелось бы чтобы результат запроса выглядел вот так:
num fio summa september october
4 Толстова Анастасия Леонидовна 1400 1400 1400
5 Толстоносов Альберт Дмитриевич 1400 2800 0
6 Богдя Данил Иванович 1400 1400 1400
23 дек 13, 20:07    [15336092]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
sdet
Member

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

Можно через pivot, можно через max(case when code2...) и group by
23 дек 13, 21:00    [15336258]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
o-o
Guest
поди вот такое хочет:
select num,fio,summa,
		sum(case when code2 ='092012' then summa_opl else 0 end) as september,
		sum(case when code2 ='102012'  then summa_opl else 0 end) as october
from archive_opl where CODE2='092012' or CODE2='102012'
group by num,fio,summa
order by num
23 дек 13, 21:10    [15336279]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
soi
Member

Откуда:
Сообщений: 6
Это тоже не совсем то, что надо. Записи по прежнему двойные. Уже не знаю что делать. Надо забыть про этот запрос на время, решение потом неожиданно само появится. У меня так бывает)))
25 дек 13, 11:30    [15344149]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
o-o
Guest
soi,

как-то слабо верится, что при наличии group by num,fio,summa,
"задвоятся" строки с одинаковыми num,fio,summa
может, кто-то еще что-то "присоединил"?

declare @archive_opl table (num int, fio nvarchar(100), summa int, summa_opl int, code2 char(6))
insert into @archive_opl (num,	fio, summa,	summa_opl, code2) values 
(4,	N'Толстова Анастасия Леонидовна',	1400, 1400, '102012'),
(4,	N'Толстова Анастасия Леонидовна',	1400, 1400, '092012'),
(5,	N'Толстоносов Альберт Дмитриевич',	1400, 2800, '092012'),
(6,	N'Богдя Данил Иванович', 1400,	1400,'102012'),	 
(6,	N'Богдя Данил Иванович', 1400, 1400, '092012')


select num,fio,summa,
		sum(case when code2 ='092012' then summa_opl else 0 end) as september,
		sum(case when code2 ='102012'  then summa_opl else 0 end) as october
from @archive_opl where CODE2='092012' or CODE2='102012'
group by num,fio,summa
order by num
----------------------------------
num	fio	summa	september	october
4	Толстова Анастасия Леонидовна	1400	1400	1400
5	Толстоносов Альберт Дмитриевич	1400	2800	0
6	Богдя Данил Иванович	1400	1400	1400
25 дек 13, 11:56    [15344323]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
sdet
Member

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

Покажите рез выполнения этого запроса
25 дек 13, 11:56    [15344324]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
o-o
Guest
sdet
soi,
Покажите рез выполнения этого запроса

лучше пусть покажет сам запрос.
вернее, его модификацию
25 дек 13, 11:59    [15344341]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
soi
Member

Откуда:
Сообщений: 6
Вот запрос:
select num,fio,summa,
sum (case when code2 ='092012' then summa_opl else 0 end) as september,
sum (case when code2 ='102012' then summa_opl else 0 end) as october
from archive_opl where CODE2='092012' or CODE2='102012'
group by num,fio,summa
order by num

Это результат его выполнения:
num fio summa september october
4 Толстова Анастасия Леонидовна 1400 1400 1400
5 Толстоносов Альберт Дмитриевич 0 0 0
5 Толстоносов Альберт Дмитриевич 1400 2800 0
6 Богдя Данил Иванович 1400 1400 1400
7 Силинская Алина Андреевна 1400 1400 2800
8 Цалман Елена 1400 1400 1400
9 Хохолкова Алена Юрьевна 1400 0 0
9 Хохолкова Алена Юрьевна 2800 0 0
10 Лопытько Александра Сергеевна 1400 1400 1400
13 Антипьева Анастасия Сергеевна 1400 1400 0
14 Грачева Алена Александровна -200 0 0
14 Грачева Алена Александровна 1400 3000 0
15 Ильенко Дмитрий Андреевич 1400 1400 1400
16 Егоров Арсений Николаевич 1400 1400 1400
17 Гущина Владислава Вадимовна 1300 0 1400
17 Гущина Владислава Вадимовна 1400 1500 0
19 Лещёв Михаил Константинович 0 0 0
19 Лещёв Михаил Константинович 1400 2800 0
25 дек 13, 13:09    [15344875]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
Добрый Э - Эх
Guest
Тестовый набор репрезентативных данных и желаемый результат на них приведи.
25 дек 13, 13:14    [15344919]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
Добрый Э - Эх
Guest
soi,

а вообще, не ясно, на кой ляд ты, раскидывая суммы по столбцам, включаешь поле summa в группировку
25 дек 13, 13:19    [15344969]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
Добрый Э - Эх
Guest
Я про это, если что:
select num,fio,summa,
sum (case when code2 ='092012' then summa_opl else 0 end) as september,
sum (case when code2 ='102012'  then summa_opl else 0 end) as october
from archive_opl where CODE2='092012' or CODE2='102012'
group by num,fio,summa
order by num
25 дек 13, 13:20    [15344977]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
soi
Member

Откуда:
Сообщений: 6
Добрый Э - Эх,

Там в таблице 2 поля с суммами. Поле "Summa"- это сумма к оплате, а поле "Summa_opl" - это оплаченная сумма за месяц. Данные по разным периодам (сентябрь, октябрь и т.д.) находятся в одной таблице, поэтому я их раскидываю по столбцам, для удобства чтения отчета о должниках.
25 дек 13, 13:23    [15345001]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
Добрый Э - Эх
Guest
тогда не понял - в чем суть вопроса?
25 дек 13, 13:25    [15345011]     Ответить | Цитировать Сообщить модератору
 Re: Множественный выбор из одной таблицы (по столбцам)  [new]
o-o
Guest
soi,

у вас на одного индивида в таблице имеется несколько сумм, к-ые summa.
отсюда и "задвоение" строк.
вариант1:
убираем эту summa из запроса вообще (нет суммы -- нет задвоения :)):
select num,fio,
		sum(case when code2 ='092012' then summa_opl else 0 end) as september,
		sum(case when code2 ='102012'  then summa_opl else 0 end) as october
from archive_opl where CODE2='092012' or CODE2='102012'
group by num,fio
order by num


вариант2:
определяемся с тем, какую именно из множества сумм, приходящихся на одного индивида из таблицы,
вы хотите вывести.
например, хотите максимальную, тогда будет выглядеть так:
select num,fio,max(summa) as summa,
		sum(case when code2 ='092012' then summa_opl else 0 end) as september,
		sum(case when code2 ='102012'  then summa_opl else 0 end) as october
from archive_opl where CODE2='092012' or CODE2='102012'
group by num,fio
order by num
25 дек 13, 14:02    [15345327]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить