Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сделать выборку, которая...
|
|||
|---|---|---|---|
|
#18+
Есть две таблицы 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 две строки: всего жильцов и льгот. Как сделать одной строкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2002, 09:54 |
|
||
|
Как сделать выборку, которая...
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2002, 10:06 |
|
||
|
Как сделать выборку, которая...
|
|||
|---|---|---|---|
|
#18+
2 Glory Спасибо. Еще вопрос, он правда не в тему, но. В общем, задача состоит в том, чтобы по каждому лицевому счету вычислить квартплату, для этого необходимо обработать кучу полей из кучи таблиц. Сейчас по таблице t1 я двигаюсь курсором, считываю те поля, которые мне нужны, и их обрабатываю. Тоже самое select'ом сделать можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2002, 10:53 |
|
||
|
Как сделать выборку, которая...
|
|||
|---|---|---|---|
|
#18+
Слишком мало информации - сколько конкретно эта "куча таблиц"? насколько подходяще они спроектированы ? - насколько сложны рассчеты ? Одна формула ? Или поэтапное вычисление ? - какая версия SQL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2002, 11:02 |
|
||
|
Как сделать выборку, которая...
|
|||
|---|---|---|---|
|
#18+
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 отключить вывод на экран? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2002, 12:14 |
|
||
|
Как сделать выборку, которая...
|
|||
|---|---|---|---|
|
#18+
- Лучше установить SQL2000, т.к. в SQL7 действительно нет UDF, которые можно использовать непосредственно в тексте запроса. - Совсем вывод на экран в QA отключить IMHO нельзя. Если это раздражает, то можно направить весь вывод в файл. Теперь про задачу Скорее всего одним запросом не получиться, но это не значит, что нужно непременно использовать курсор. Думаю вполне можно обойтись несколькими запросами, используя временные таблицы для хранения промежуточных результатов Если время у вас терпит, то можете скинуть на brylyev@mail.com - структуры ваших таблиц(лучше всего в виде скрипта, сгенерированного в QA или EM) - кусок данных, в которых желательно есть наиболее разнообразные варианты (желательно в виде файла(ов), сформированных с помощью bcp вместе с format file) - описание рассчетов, как можно подробнее(можно приложить и свой код) Попробую в течении следующей недели взглянуть и сделать какие-то предложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2002, 07:15 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3517&tid=1824392]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 340ms |

| 0 / 0 |
