powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос для SQL Server 2000 ?
9 сообщений из 9, страница 1 из 1
Сложный запрос для SQL Server 2000 ?
    #32190434
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перевожу mdb 2000 в adp 2000.
Такая штука:
в mdb был запрос Balans, который в качестве источников данных использовал запросы, возвращающие таблицы в в виде (Customer_ID, Data_Oper, Sum_Tarif)
В mdb Balans выглядел примерно так (учитывая, что входящих в него запросов 7 штук, то сокращенно, но суть одна к таблице Customers подвязаны Запросы по полю Customer_ID)

SELECT Members.Filials, Customers.Number, Customers.Firms, IIf(IsNull([Saldo]),0,[Saldo]) AS Ost, IIf(IsNull([Sum-Amount]),0,[Sum-Amount]) AS Pay, IIf(IsNull([Tariff]),0,[Tariff]) AS RepTehPD
FROM Members INNER JOIN ((Customers LEFT JOIN Balans_Pay ON Customers.Number = Balans_Pay.Customer_ID) LEFT JOIN Balans_Work_TehPD ON Customers.Number = Balans_Work_TehPD.Customer_ID) ON Members.Code = Customers.Member
GROUP BY Members.Filials, Customers.Number, Customers.Firms, IIf(IsNull([Saldo]),0,[Saldo]), IIf(IsNull([Sum-Amount]),0,[Sum-Amount]), IIf(IsNull([Tariff]),0,[Tariff])
ORDER BY Members.Filials, Customers.Firms;

и все работало, хотя медленно

Собственно, проблема:
в ADP исходные запросы сделал в виде View, которые сами по себе в отдельности работают быстро, в вот попытка сдклать View по типу запроса Balans привела к тому, что SQL выдает сообщение: "Время ожидания истекло" и , соответствнно, ничего не выводит.

Что делать то ?
Подкиньте идею, может не в лоб надо перекидывать запрос в ADP ?
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32190443
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что же ты сам "Сложный запрос для SQL Server 2000" не привел?
Заодно раскажи про наличии индексов.
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32190610
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполните его в SQL Query Analyzer сначала, посмотрите план выполнения запроса, посмотрите, сколько запрос выполняется.
Время ожидания в Акссесе должно быть равно 0.

Ну и индексы конечно же.
А нельзя ли обойтись без такого количества Iff (соответственно Case в SQL)?
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32190761
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам запрос в ADP:

SELECT dbo.Members.Filials, dbo.Customers.Number,
dbo.Customers.Firms, dbo.Customers.FirmsReal,
SUM(ISNULL(dbo.view_Balans_Pay.[Sum-Amount], 0)) AS Pay,
SUM(ISNULL(dbo.view_Balans_Saldo.Saldo, 0)) AS Ost,
SUM(ISNULL(dbo.view_Balans_Work.Tariff, 0)) AS SumWork,
SUM(ISNULL(dbo.[view_Balans_Work_SNG-Demand].TariffDemands,
0)) AS SumWorkOnDemand
FROM dbo.Customers INNER JOIN
dbo.Members ON
dbo.Customers.Member = dbo.Members.Code LEFT OUTER JOIN
dbo.[view_Balans_Work_SNG-Demand] ON
dbo.Customers.Number = dbo.[view_Balans_Work_SNG-Demand].CustomerID
LEFT OUTER JOIN
dbo.view_Balans_Work ON
dbo.Customers.Number = dbo.view_Balans_Work.Number LEFT OUTER
JOIN
dbo.view_Balans_Saldo ON
dbo.Customers.Number = dbo.view_Balans_Saldo.Number LEFT OUTER
JOIN
dbo.view_Balans_Pay ON
dbo.Customers.Number = dbo.view_Balans_Pay.IDCust
GROUP BY dbo.Customers.Number, dbo.Customers.Firms,
dbo.Customers.FirmsReal, dbo.Members.Filials
HAVING (SUM(ISNULL(dbo.view_Balans_Pay.[Sum-Amount], 0))
<> 0) OR
(SUM(ISNULL(dbo.view_Balans_Saldo.Saldo, 0)) <> 0) OR
(SUM(ISNULL(dbo.view_Balans_Work.Tariff, 0)) <> 0) OR
(SUM(ISNULL(dbo.[view_Balans_Work_SNG-Demand].TariffDemands,
0)) <> 0)


Индексы по полю dbo.Customers.Number есть, и во всех связанных с этим полем таблицам также есть.
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32190773
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Время выполнения в Query Analyzer - 9.0 минут :((

В mdb было гораздо быстрее
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32190829
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Индексы по полю dbo.Customers.Number есть, и во всех связанных с этим полем таблицам также есть.

а по:
dbo.Customers.Member, dbo.Members.Code, dbo.view_Balans_Pay.IDCust есть индексы? Поставь, обнови статистику.

А тормоза скорее всего от HAVING, что приводит к сканированию таблиц.

А вообще лучший тебе помощник - QA и Profiler
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32190975
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я чего-нибудь не понимаю ,но зачем тебе LEFT JOIN если ты все равно не выводишь группы с нулевыми суммами.А в остальном согласен с Senin Viktor
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32190988
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я думаю если запрос правильно сделать и оптимизировать индексы - будет летать за доли секунды и не грузить сервак.

1. запрос лучше запихать во вьюху или процедуру - ускорение до 3 раз чем если запускаешь текстовый запрос.

2. в твоем случае я убрал бы группировку из главного запроса

главный запрос должен выбирать набор записей для отображения - все нессумовые поля.

суммовые поля вынести во вложенные селекты.

способ не универсальный но иногда спасает
...
Рейтинг: 0 / 0
Сложный запрос для SQL Server 2000 ?
    #32191160
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. А это и так View, который включает в себя View_1, .... View_n

2. View_n - летают махом

Может я чего перемудрил, но мне нужно следующее (на пальцах)
1. Есть таблица "Клиенты" (ID_Cust, Name)
2. Есть разные таблицы, по которым разложена наработка по клиентам (свести все в одну нет возможности), на основе каждой их n таблиц я строю View_1, ... View_n в виде (Date_Oper, ID_Cust, Summa)
3. В итоге мне нужно увидеть такую таблицу:
Date_Oper ID_Cust Summa1 Summa2 ...

причем должны выводиться только те ID_Cust, по которым хотя бы одна Summa<>0
Очень похожая вещь на оборотно-сальдовую ведомость по клиентам, проблема только, что наработка по разным таблицам разбросана.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос для SQL Server 2000 ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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