powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать выборку, которая...
7 сообщений из 7, страница 1 из 1
Как сделать выборку, которая...
    #32020345
vl80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть две таблицы t1 (лицевой счет для каждой квартиры - уникально) и t2 (жильцы, живущие в квартире). Поле id (лицевые счета) есть в t1 и t2.
Нужно определить по лицевому счету из t1 сколько жильцов живет в квартире и сколько у них у всех льгот (по полю t2.lgota).

Пишу так:

select t2.id, count(*), (case when t2.lgota != 0 then count(*) end) from t2 inner join t1 on t1.id = t2.id group by t2.id, t2.lgota order by t2.id

Если льгота есть, он возвращает для лицевого счета из t1 две строки: всего жильцов и льгот. Как сделать одной строкой?
...
Рейтинг: 0 / 0
Как сделать выборку, которая...
    #32020347
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select t1.id, count(*) as cnt1, sum(case when t2.lgota != 0 then 1 else 0 end) as cnt2
from t1 inner join t2 on t2.id = t1.id
group by t1.id
...
Рейтинг: 0 / 0
Как сделать выборку, которая...
    #32020352
vl80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Glory

Спасибо.

Еще вопрос, он правда не в тему, но.
В общем, задача состоит в том, чтобы по каждому лицевому счету вычислить квартплату, для этого необходимо обработать кучу полей из кучи таблиц.
Сейчас по таблице t1 я двигаюсь курсором, считываю те поля, которые мне нужны, и их обрабатываю.
Тоже самое select'ом сделать можно?
...
Рейтинг: 0 / 0
Как сделать выборку, которая...
    #32020355
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слишком мало информации
- сколько конкретно эта "куча таблиц"? насколько подходяще они спроектированы ?
- насколько сложны рассчеты ? Одна формула ? Или поэтапное вычисление ?
- какая версия SQL ?
...
Рейтинг: 0 / 0
Как сделать выборку, которая...
    #32020359
vl80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. SQL Server 7.0
2. Таблиц, из которых выбираются данные для расчета, не так уж и много: четыре-пять, покрайней мере пока. Вроде бы более менее нормализованы, покрайней мере данные не повторяются.
3. Вычисления многоэтапные.
Например, я уже писал, что нужно определить сколько человек имеют льготы, потом льготы на каждого человека или на всю семью, какие льготы. На основе этого, то есть как минимум тремя путями, вычисляется размер льгот, причем алгоритмы вычисления разные. Также иногда необходимо вычислять размер льгот сразу по нескольким алгоритмам.
Затем начинается расчет суммы, которую необходимо заплатить. Расчеты разные, например для водопровод, вывоз мусора, отопление, техобслуживание и т.д. (где-то 9 видов рассчета). Затем с учетом льгот выясняется сумма, которую необходимо заплатить. В конце концов должен быть получен размер квартплаты для каждого лицевого счета.

Вроде бы в запросах можно использовать функции, но их, кажется в server'е 7.0 нет, или есть? (функции даже на postgresql есть)

В принципе, если большая разница, то можно поставить и ms sql server 2000.


PS. Только начал все это делать. Пока чуть-чуть сделал при использовании cursor и, то же самое, select
Разница в 53 раза (в query analyser), правда когда делаю курсором, там достаточно много лишнего текста выводится, и нет индексов, хотя записей всего лишь 20000.

PPS. Кстати не подскажешь можно ли в query analyser отключить вывод на экран?
...
Рейтинг: 0 / 0
Как сделать выборку, которая...
    #32020396
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- Лучше установить SQL2000, т.к. в SQL7 действительно нет UDF, которые можно использовать непосредственно в тексте запроса.

- Совсем вывод на экран в QA отключить IMHO нельзя. Если это раздражает, то можно направить весь вывод в файл.

Теперь про задачу
Скорее всего одним запросом не получиться, но это не значит, что нужно непременно использовать курсор. Думаю вполне можно обойтись несколькими запросами, используя временные таблицы для хранения промежуточных результатов
Если время у вас терпит, то можете скинуть на brylyev@mail.com
- структуры ваших таблиц(лучше всего в виде скрипта, сгенерированного в QA или EM)
- кусок данных, в которых желательно есть наиболее разнообразные варианты (желательно в виде файла(ов), сформированных с помощью bcp вместе с format file)
- описание рассчетов, как можно подробнее(можно приложить и свой код)

Попробую в течении следующей недели взглянуть и сделать какие-то предложения.
...
Рейтинг: 0 / 0
Как сделать выборку, которая...
    #32020422
vl80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буду очень рад, если выскажете свои соображния.
Сегодня еще обдумаю расчеты и завтра отошлю на e-mail.

Большое спасибо за ответы
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать выборку, которая...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]