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

Откуда: С-Петербург
Сообщений: 616
natya,
вот так попробуй
-- справочник телефонов
declare @table3 table(phone2 int) -- почему int ???
insert into @table3 values(111111)
insert into @table3 values(222222)
insert into @table3 values(333333)
insert into @table3 values(444444)
insert into @table3 values(555555)

-- импортируемые таблицы  задолжностей 
declare @table2 table(phone1 int,debt money) 
insert into @table2 values(111111,8.6)
insert into @table2 values(222222,5.6)

declare @table1 table(phone int,old_debt money) 
insert into @table1 values(111111,3.6)

declare @t242 table(ph int,qebzbr money) 
insert into @t242 values(111111,3.6)
insert into @t242 values(33333,5.6)
insert into @t242 values(55555,6.3)

declare @t1 table(phone int,sadbr money) 
insert into @t1 values(111111,1.6)
insert into @t1 values(55555,2.3)

-- импортируемая таблица оплаты 
declare @absher table(telefon varchar(10),kod varchar(10),sifre varchar(10),odenis varchar(10)) 
insert into @absher values('111111','92','66','1.5')
insert into @absher values('222222','96','00','3.6')
insert into @absher values('333333','89','33','8.9')

-- предполагаемый результат  (по мотивам natya и Maxx)
select t3.phone2
,SUM((ISNULL(t2.debt,0.0)-ISNULL(t1.old_debt,0.0)) - case when p.tf  IS NULL then 0 else  ISNULL(p.mny , 0) end)  as f1
,Sum(ISNULL(tt1.sadbr,0.0)-ISNULL(t242.qebzbr,0.0)) as f2
from @table3 t3
left join @table2 t2  ON t2.phone1 = t3.phone2
left join @table1 t1  ON t1.phone   = t3.phone2
left join @t242  t242 ON t242.ph	= t3.phone2
left join @t1	     tt1  ON tt1.phone	= t3.phone2
left join (select convert(int,telefon) as tf,convert(money,odenis)/100.0 as  mny, rejim = case
when convert(int,kod)=92 and convert(int,sifre) in(0,66) and convert(int,telefon)<200000
then 'sex by phone'
when convert(int,kod)=96 and convert(int,sifre) in(0,66) and convert(int,telefon)>200000 
then 'internet'
--......
else 'no'
end
from @absher) p	ON p.tf = t3.phone2
group by t3.phone2
23 май 13, 09:33    [14336857]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
ну все равно спасибо за скриптом

дал мне резултат

спасибо
23 май 13, 09:45    [14336904]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
LexusR,

спасибо
23 май 13, 09:49    [14336925]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
да не за что
я только в кучу собрал старания всех )))
надеюсь что у тебя всё получиться

следующий вопрос оформляй в виде работающего кода и ответ получишь гораздо быстрей !!!
23 май 13, 09:54    [14336944]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
LexusR,
ок друг мой

спасибо за внимания
23 май 13, 10:04    [14336979]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
да все получилос

спасибо
23 май 13, 10:05    [14336983]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
LexusR,
извини за беспокойства

но в резултате не видно поля 'rejim'


резултат так

phone2 f1 f2
---------------
23 май 13, 13:10    [14338188]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
natya,

нужн резултат так

-------------------------
phone2 f1 f2 mny rejim
23 май 13, 13:17    [14338244]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
1. вообще-то поле mny уже задействовано в сумме (f1)
2. если в таблице @absher по каждому телефону только записи с однаковым полем p.rejim никаких проблем
- втыкай в select и group by
select t3.phone2,p.rejim
,SUM((ISNULL(t2.debt,0.0)-ISNULL(t1.old_debt,0.0)) - case when p.tf  IS NULL then 0 else  ISNULL(p.mny , 0) end)  as f1
,Sum(ISNULL(tt1.sadbr,0.0)-ISNULL(t242.qebzbr,0.0)) as f2
.....
group by t3.phone2,p.rejim


НО если в таблице @absher по каждому телефону несколько записей с разным p.rejim то тогда либо нужно собирать
поля p.rejim через запятую на один телефон - либо знать какие строки из таблиц долгов относятся к каждому p.rejim
23 май 13, 14:12    [14338686]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
ты случайно не утаил полей kod и sifre в таблицах ???
@table2 table(phone1 int,debt money)
@table1 table(phone int,old_debt money)
@t242 table(ph int,qebzbr money)
@t1 table(phone int,sadbr money)
23 май 13, 14:15    [14338715]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
ok

извини ошиблас

толко

phone2 f1 f2 mny


rejim не нужн
23 май 13, 14:28    [14338827]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
LexusR,
ваша скрипт работает отлично


но нужн мне вставит в резуултате sum(mny) для каждого группировка номера


но формат у меня в табличе формат номера другая


вот такой формат

absher

telefon
005896369
005236895


и поетому я сделую

select convert(int,telefon) as tf,convert(money,odenis)/100.0 as mny from absher


но немогу вставлят в резултате
sum(mny) для каждого группировка номера


select t3.phone2
,SUM((ISNULL(t2.debt,0.0)-ISNULL(t1.old_debt,0.0)) - case when p.tf IS NULL then 0 else ISNULL(p.mny , 0) end) as f1
,Sum(ISNULL(tt1.sadbr,0.0)-ISNULL(t242.qebzbr,0.0)) as f2б
sum (convert(money,odenis)/100.0) as summ
from @table3 t3
..........
...............
................
group by t3.phone2


так у меня не получается
23 май 13, 14:41    [14338916]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
-- справочник телефонов
declare @table3 table(phone2 int) -- почему int ???
insert into @table3 values(111111)
insert into @table3 values(222222)
insert into @table3 values(333333)
insert into @table3 values(444444)
insert into @table3 values(555555)

-- импортируемые таблицы  задолжностей 
declare @table2 table(phone1 int,debt money) 
insert into @table2 values(111111,8.6)
insert into @table2 values(222222,5.6)

declare @table1 table(phone int,old_debt money) 
insert into @table1 values(111111,3.6)

declare @t242 table(ph int,qebzbr money) 
insert into @t242 values(111111,3.6)
insert into @t242 values(33333,5.6)
insert into @t242 values(55555,6.3)

declare @t1 table(phone int,sadbr money) 
insert into @t1 values(111111,1.6)
insert into @t1 values(55555,2.3)

-- импортируемая таблица оплаты 
declare @absher table(telefon varchar(10),kod varchar(10),sifre varchar(10),odenis varchar(10)) 
insert into @absher values('111111','92','66','1.5')
insert into @absher values('222222','96','00','3.6')
insert into @absher values('333333','89','33','8.9')

-- предполагаемый результат  (по мотивам natya и Maxx)
select t3.phone2
,SUM((ISNULL(t2.debt,0.0)-ISNULL(t1.old_debt,0.0)) - case when p.tf  IS NULL then 0 else  ISNULL(p.mny , 0) end)  as f1
,Sum(ISNULL(tt1.sadbr,0.0)-ISNULL(t242.qebzbr,0.0)) as f2
,SUM(ISNULL(p.mny , 0)) as MNY
from @table3 t3
left join @table2 t2  ON t2.phone1 = t3.phone2
left join @table1 t1  ON t1.phone   = t3.phone2
left join @t242  t242 ON t242.ph	= t3.phone2
left join @t1	     tt1  ON tt1.phone	= t3.phone2
left join (select convert(int,telefon) as tf,convert(money,odenis)/100.0 as  mny, rejim = case
when convert(int,kod)=92 and convert(int,sifre) in(0,66) and convert(int,telefon)<200000
then 'sex by phone'
when convert(int,kod)=96 and convert(int,sifre) in(0,66) and convert(int,telefon)>200000 
then 'internet'
--......
else 'no'
end
from @absher) p	ON p.tf = t3.phone2
group by t3.phone2
23 май 13, 14:51    [14338999]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
natya
ok

извини ошиблас

толко

phone2 f1 f2 mny


rejim не нужн


оффтопег: так вы девушка? ну чтобы правильно обращаться, суффиксы...
23 май 13, 14:51    [14339002]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
LexusR,

спасибо брат

все оьлично получилоос
23 май 13, 16:01    [14339710]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
Удачи брат!
23 май 13, 17:13    [14340142]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
LexusR,
привет
а зачем нужн етот скрипт
-case when p.tf IS NULL then 0 else ISNULL(p.mny , 0) end)


select t3.phone2
,SUM((ISNULL(t2.debt,0.0)-ISNULL(t1.old_debt,0.0)) - case when p.tf IS NULL then 0 else ISNULL(p.mny , 0) end) as f1
,Sum(ISNULL(tt1.sadbr,0.0)-ISNULL(t242.qebzbr,0.0)) as f2
,SUM(ISNULL(p.mny , 0)) as MNY
from @table3 t3


я не понимаю

можете обяснит
24 май 13, 08:59    [14342367]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
Ты же сам писал


...если mny и rejim not null
тогда

phone2 (debt-old_debt - mny),(adbr-qebzbr)
24 май 13, 09:53    [14342729]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
это отнимается оплата от долга если она есть
24 май 13, 09:54    [14342744]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
LexusR,

declare @table3 table(phone2 int) --
insert into @table3 values(111111)
insert into @table3 values(222222)
insert into @table3 values(333333)
insert into @table3 values(444444)
insert into @table3 values(555555)

-- импортируемые таблицы задолжностей
declare @table242 table(phone1 int,debt money)
insert into @table242 values(111111,1.23)
insert into @table2 values(222222,0.98)
insert into @table2 values(333333,2.3)
insert into @table2 values(444444,6.3)
insert into @table2 values(555555,5.6)

declare @table1 table(phone int,old_debt money)
insert into @table1 values(111111,6.3)
insert into @table1 values(222222,3.2)
insert into @table1 values(333333,6.5)
insert into @table1 values(444444,2.3)

declare @table2 table(ph int,qebzbr money)
insert into @t2 values(111111,6.3)
insert into @t2 values(222222,5.5)
insert into @t2 values(333333,4.4)
insert into @t2 values(444444,0.89)
insert into @t2 values(555555,3.9)

declare @t1 table(phone int,sadbr money)
insert into @t1 values(111111,-1.10)
insert into @t1 values(222222,2.00)
insert into @t1 values(333333,1.30)
insert into @t1 values(444444,5.6)
insert into @t1 values(555555,3.2)



-- импортируемая таблица оплаты
declare @absher table(telefon varchar(10),odenis varchar(10))
insert into @absher values('00111111','000000089')
insert into @absher values('00111111','000000056')
insert into @absher values('00222222','000000065')
insert into @absher values('00333333','000000010')



---------- импортируемая долг
declare @avans table(Test varchar(10),Test varchar(10))
insert into @avans values('00111111','000000009')
insert into @avans values('00111111','000000523')
insert into @avans values('00111111','000000026')
insert into @avans values('00222222','000000056')
insert into @avans values('00222222','000000052')
insert into @avans values('00333333','000000035')
insert into @avans values('00333333','000000058')
insert into @avans values('00444444','000000058')




--------------------------------------------------------------
select t3.phone2,
Sum(ISNULL(tt1.sadbr,0.0)-ISNULL(t242.qebzbr,0.0)) as f2
,SUM(ISNULL(t2.debt,0.0)-isnull(t1.old_debt,0.0)
) as f1
,sum(isnull(p.mny,0)) as abser_ode
,sum(isnull (d.av_sad,0)) as avansid_ode
from table3 as t3
left join t242 as t242 ON t242.ph= t3.phone2
left join t1 as tt1 ON tt1.phone= t3.phone2
left join table2 as t2 ON t2.phone1 = t3.phone2
left join table1 as t1 ON t1.phone = t3.phone2
left join (select convert(int,telefon) as tf,convert(money,odenis)/100.0 as mny
from absher) p ON p.tf = t3.phone2
left join (select convert(int,test) as tlf ,convert(money,Test1)/100.0 as av_sad from avans
)as d on d.tlf=t3.phone2
group by t3.phone2

------------------------------------


дет меня резултат три траза болше чем я ожидаю
24 май 13, 16:03    [14346008]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Гость333
Member

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

Ради интереса скопировал и запустил ваш скрипт. Получил пачку ошибок:
Msg 1087, Level 15, State 2, Line 11
Must declare the table variable "@table2".
Msg 1087, Level 15, State 2, Line 12
Must declare the table variable "@table2".
Msg 1087, Level 15, State 2, Line 13
Must declare the table variable "@table2".
Msg 1087, Level 15, State 2, Line 14
Must declare the table variable "@table2".
Msg 1087, Level 15, State 2, Line 23
Must declare the table variable "@t2".
Msg 1087, Level 15, State 2, Line 24
Must declare the table variable "@t2".
Msg 1087, Level 15, State 2, Line 25
Must declare the table variable "@t2".
Msg 1087, Level 15, State 2, Line 26
Must declare the table variable "@t2".
Msg 1087, Level 15, State 2, Line 27
Must declare the table variable "@t2".

Вы хотя бы в состоянии выложить скрипт, выполняющийся без ошибок?
24 май 13, 16:14    [14346098]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Гость333
Member

Откуда:
Сообщений: 3683
natya
declare @avans table(Test varchar(10),Test varchar(10))

Ваша версия SQL Server позволяет создавать таблицы с двумя столбцами с одинаковыми именами Test?
24 май 13, 16:15    [14346110]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
нет просто я ошиблас

declare @avans table(Test varchar(10),Test1 varchar(10))
24 май 13, 16:22    [14346166]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
LexusR
Удачи брат!


Сестра (?)

автор
natya
ok

извини ошиблас
24 май 13, 16:24    [14346181]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
с калкуляторм дает точно

а с скл дает 3 раза болше в поле avansid_ode
24 май 13, 16:24    [14346183]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить