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

Откуда:
Сообщений: 3683
natya
если mny и rejim NULL
тогда

phone2 (debt-old_debt) ,(adbr-qebzbr)

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

phone2 (debt-old_debt- mny ),(adbr-qebzbr)

Рассмотрены не все варианты.
Что, если mny NULL, а rejim NOT NULL?
Что, если mny NOT NULL, а rejim NULL?
22 май 13, 14:52    [14333330]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
natya
если mny и rejim not null
тогда

phone2 (debt-old_debt-mny ),(adbr-qebzbr)


phone2 , x = ((debt-old_debt) - case when NULLIF(rejim , '') is NULL then 0 esle ISNULL(mny , 0) end) , (adbr-qebzbr)
22 май 13, 14:54    [14333351]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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

phone2 ето база номера примерно 50000 номер
--------
111111
222222
333333
444444
555555

2) table2 debt ето долг1 номера
phone1 етот номер который ест дол1
phone1 debt
--------------- импортирую каждый месяч
111111 8.6
222222 5.6

3) table1

phone old_debt old_debt ето долг2 номера
----------------- phone етот номер который ест долг2

111111 3.6

4) t242
qebzbr ето долг3 номера
ph qebzbr ph етот номер который ест долг3
----------------
11111 3.6
33333 5.6
55555 6.3

5) absher а етот таблича оплата

telefon етот номер который делают оплата
telefon kod1 kod2 money money сумма оплата
----------------------------- kod1 kod2 ето показывает какие параметры делали оплаты
111111 92 66 1.5 например для интернета или междугородный разговор
222222 96 00 3.6
333333 89 33 8.9


к стате в базе ест толко table3 который ест данные номера


а table2, table1, t242 импортирую каждый месяч
чтобы филтроват номеры чтобы узнат какие номеры ест долг или нет

а табличы absher импортирую каждый ден чтобы филтроват номеры чтобы узнат какие номеры ест долг и сколко они оплатили
22 май 13, 15:22    [14333630]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

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

тогда причем ваш селект ????
22 май 13, 15:25    [14333663]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
а как????
22 май 13, 15:26    [14333667]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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


пример


номер долг1 долг2 долг3 оплата тип оплаты

1111 2,3 6,3 2,3 3,2 для интернета
2222 3,6 2,6 3,2 null null
3333 5.6 3.6 3.5 null null
22 май 13, 15:30    [14333702]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

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

как соотносяться долг1,долг2 и долг3 во времени ?
Зачем для 3х долгов 3 таблицы то ?
Почему не импортировать в 3 таблицы ,а патом делать 1 нормальную таблицу..но опять же без дат - ето мусор,а не биллинг.
Поробуем поставить задачу
1. Есть список телефонов
2. Есть 4 ре типа файлов для импорта ,в котрых указаны тел,сумма ? Которые импортируються 1 раз в месяц 3 штуки и 1 каждый день - правильно ?

Задача -написать скрипт ,который бы возращал сумму долга ,если он есть ?
Впоросы -
1. Даты где ? неможет же долг иил оплата по нему быть безвременной
2. Где указана абонплата или чето-то подобное ? Как узнать момент возникновеня долга ,и как его списовать ?
3. Что предтавлял из себя ваш скрипт с кучей case ? Непохоже,чтоб пытался что-то подобное делать
22 май 13, 15:36    [14333755]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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

ответы на вопросы

1)кроме список телефонов в каждой табличке ест даты

например
в table2 дата2(пример 01,05,2013) ---ето который от 01 мая ест долг1 до июна ето долг за месяча

в table1 дата2(пример 01,05,2013)---ето который от 01 мая ест долг2 до июна ето долг за месяча

в t242 дата2 (пример 01,05,2013)---ето который от 01 мая ест долг3 до июна ето долг за месяча

2)
absher ето табличка абонплата

сдес тоже ест даты например дата_оплата (пример 05,05,2013) ---ето оплата телефона и код

который показевает какие предметы они оплатили (например интернет,междугордный)
22 май 13, 15:55    [14333909]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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

долг1-долг2-долг3-оплата= долг абонента
22 май 13, 15:57    [14333926]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
там всегда данные с 1 датой и за 1 мес ?
как код из таблицы absher связан с типом долга ?
в таблице absher -тоже всего 3 типа долга возможны ?
22 май 13, 15:59    [14333950]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
natya
олг1-долг2-долг3-оплата= долг абонента

тогда ,что у вас не получается то ?
Да и при такой формуле ,скоре..если таблица bsher ежедневно переливаеться...
где взять данные за вчера ?
Т.е. вчера люди оплатили все долги ....,а сегодня в табюлице bsher,уже нет запипи по такому телефону...и получается снова долг????
22 май 13, 16:01    [14333970]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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


в таблицы absher ест код

пример


номер код1 код2 оплата
1111 92 00 2,3

222 91 66 3,6


если код1=92 и код2=00 тогда оплата для интернета

если код1=91 и код2=66 тогда оплата для междугородный
22 май 13, 16:06    [14334015]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а как тогда понять какой тип долга погашен ???
код1=92 и код2=00 - чему равен ,то долг1,долг2 иил долг3 ?
22 май 13, 16:09    [14334046]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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


ест табличе авансид дает каждый ден долг номера

например долг4


сдес тоже номер телефона и долг каждый ден ето для междугородный разговор


а табличка absher ето оплата каждый ден
22 май 13, 16:15    [14334080]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
а 3 табличы кроме авансид ето долг мсяча например ежемесячный телефонный долг
22 май 13, 16:17    [14334095]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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

да
например код1= (13 или 91) и код2=(0 или 66) ето для ежемесячный долг
22 май 13, 16:27    [14334162]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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


например изменения номера код1=92 и код2=22
22 май 13, 16:29    [14334184]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а можно сразу все....бо впечатление ,что патом окажеться таблица5 и 6
а так вообщем
суммируете все оплаты и долги в разрезе телефона,месяца и кодов (их всего 4 ре возможных ведь ? если типа долга 4ре ). патом от оплат ,отниматете долги..
У вас 2к сервер ,так что вкусности типа SUM()over() вам не предложиш :(
22 май 13, 16:31    [14334201]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
natya
например изменения номера код1=92 и код2=22

тогда определитесь,что вам надо учитывать,а что нет
22 май 13, 16:32    [14334214]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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

но получилос гигантский скрипт и визуалная таблича


а потом не мог суммироват и вычислит
22 май 13, 16:35    [14334229]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

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

ну если вот ето
автор
select cur.phone2 ,cur.debt ,cur.old_debt,m1.mny ,m1.rejim
from
(select t3.phone2,t2.debt ,tt1.old_debt,t1.sadbr,t242.qebzbr
from table3 as t3 left join table2 as t2 on t3.phone2=t2.phone1 left join table1 as tt1
on t2.phone1=tt1.phone left join t1 on tt1.phone=t1.phone left join t242 on t242.ph=t1.phone)as cur
left outer join..............

ваш запрос...и даты вам по боку ..то просто в конце селекта дописывайте group by t3.phone2 и суммируйте все числовые поля ,так как вам надо
22 май 13, 16:52    [14334374]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
с group by t3.phone2 не получается
22 май 13, 16:58    [14334423]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
Maxx
Member [скрыт]

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

чего? может что-то пишет в сообщени об ошибке ?
22 май 13, 17:05    [14334481]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
ПОПРОБУЕМ РЕЗЮМИРОВАТЬ ВСЕ УСИЛИЯ ПОМОЧЬ
-- справочник телефонов
declare @table3 table(phone2 int) -- почему int ???
insert into @table3 values(111111), (222222),(333333),(444444),(555555)

-- импортируемые таблицы  задолжностей 
declare @table2 table(phone1 int,debt money) 
insert into @table2 values(111111,8.6), (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),(33333,5.6),(55555,6.3)

declare @t1 table(phone int,sadbr money) 
insert into @t1 values(111111,1.6),(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'),('222222','96','00','3.6'),('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


непонятно только куда присоеденить тип оплаты rejim а если его не присоединять то тогда вроде не нужен
этот грандиозный case
23 май 13, 06:52    [14336449]     Ответить | Цитировать Сообщить модератору
 Re: case when и select  [new]
natya
Member [заблокирован]

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

спасибо
но я получил ошибку
у вас работал етот скрипт


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