|
|
|
Использование результа динамического select в другом selecte
|
|||
|---|---|---|---|
|
#18+
Возник такой вопрос - как использовать результат динамического select в другом selecte. Допустим есть динамический запрос: DECLARE @BankBranchID int DECLARE @PlanID int DECLARE @AreaID int DECLARE @FundID int DECLARE @RestDate datetime SET @BankBranchID=1 SET @PlanID=2 SET @AreaID=1 SET @FundID=NULL SET @RestDate='2002-03-14' DECLARE @SQL nvarchar(4000) SET @SQL = 'SELECT AccAnlID = aa.AccountAnalyticID,' + 'BankBranchID = aa.BankBranchID,' + 'AccAnlCharacter = aa.AccountCharacter,' + 'AccAnlDateOpen = aa.AccountDateOpen,' + 'AccAnlDateClose = aa.AccountDateClose,' + 'AccSynID = ap.AccountSyntheticID,' + 'FundID = ap.FundID,' + 'AccAnlPicture = ap.AccountPicture,' + 'AccSynPicture = ss.AccountPicture,' + 'LevelID = lv.LevelID,' + 'AreaID = lv.AreaID,' + 'PlanID = lv.PlanID,' + '(SELECT TOP 1 rs.RestDate FROM AccountsAnalyticRests AS rs WHERE rs.AccountAnalyticID = aa.AccountAnalyticID and rs.RestDate <= '+ char(39)+convert(nvarchar,@RestDate,121)+char(39) +' ORDER BY RestDate DESC) AS RestDate,' + '(SELECT TOP 1 rs.RestOut FROM AccountsAnalyticRests AS rs WHERE rs.AccountAnalyticID = aa.AccountAnalyticID and rs.RestDate <= '+ char(39)+convert(nvarchar,@RestDate,121)+char(39) +' ORDER BY RestDate DESC) AS RestOut ' + 'INTO #AccAnlRests ' + 'FROM AccountsAnalytic AS aa ' + 'INNER JOIN AccountsAnalyticPictures AS ap ON aa.AccountAnalyticID = ap.AccountAnalyticID ' + 'INNER JOIN AccountsSynthetic AS ss ON ap.AccountSyntheticID = ss.AccountSyntheticID ' + 'INNER JOIN BankLevels AS lv ON ss.LevelID = lv.LevelID ' + 'WHERE isnull(aa.AccountDateOpen, ' +char(39)+'19921104'+char(39)+')<='+char(39)+convert(nvarchar,@RestDate,121)+char(39) + ' AND isnull(aa.AccountDateClose, '+char(39)+'99991231'+char(39)+')>='+char(39)+convert(nvarchar,@RestDate,121)+char(39) IF @BankBranchID IS NOT NULL SET @SQL = @SQL + ' AND aa.BankBranchID=' + CAST(@BankBranchID AS nvarchar) IF @FundID IS NOT NULL SET @SQL = @SQL + ' AND ap.FundID=' + CAST(@FundID AS nvarchar) IF @PlanID IS NOT NULL SET @SQL = @SQL + ' AND lv.PlanID=' + CAST(@PlanID AS nvarchar) IF @AreaID IS NOT NULL SET @SQL = @SQL + ' AND lv.AreaID=' + CAST(@AreaID AS nvarchar) SET @SQL = @SQL + 'ORDER BY aa.BankBranchID, ap.AccountSyntheticID, ap.FundID, ap.AccountPicture' EXEC (@SQL) далее мне нужно RestOut сгруппированные по AccSynID SELECT AccSynID = rs.AccountSyntheticID, AccSynPicture = rs.AccountPicture, RestDate = rs.RestDate, RestOut = SUM(rs.RestOut) FROM #AccAnlRests AS rs GROUP BY 1 ORDER BY 2 - здесь выдает ошибку, что не найден объект #AccAnlRests В первом запросе не получается группировка, т.к. RestOut - есть результат подзапроса. Подскажите есть тут какой выход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2002, 14:12:51 |
|
||
|
Использование результа динамического select в другом selecte
|
|||
|---|---|---|---|
|
#18+
Так как временные таблицы имеют область видимости, Вы и получаете ошибку... На скорую руку можно внести второй запрос в динамический, например так (пример на учебной базе Northwind): EXEC('SELECT OrderID, CustomerID INTO #TMP FROM Northwind.dbo.Orders; SELECT CustomerID, COUNT(*) CNT from #TMP GROUP BY CustomerID ORDER BY CNT') Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2002, 14:33:59 |
|
||
|
Использование результа динамического select в другом selecte
|
|||
|---|---|---|---|
|
#18+
А что за АБС если не секрет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2002, 14:36:18 |
|
||
|
Использование результа динамического select в другом selecte
|
|||
|---|---|---|---|
|
#18+
2 jimmers: Спасибо, все получилось. 2 Ипатько Игорь: это не АБС, а что-то вроде хранилища (громко сказано); а АБС - ДиасофтБанк4х4 DOS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2002, 20:47:52 |
|
||
|
Использование результа динамического select в другом selecte
|
|||
|---|---|---|---|
|
#18+
Понятно.Мы на DiasoftBank Workflow Prof. А каким образом данные из Btrieve перегоняете в SQL. Через ODBC или text.Самое интересное что когда сидели на btrive'e нам не требовалось перегонять по той простой причине что испольуя ODBC-драйвера от Intersolve и правленные DDF от Псковбанк удавалось получать SQL-отчетность в OLTP.Напр.отчет "Клиенты и их счета" стандартным генератором отчетов строился 40-60 мин.Через ODBC (с учетом ее природной тормознутости) получали за 30-90 сек.Что касается запроса как альтернативу jimmers можно предложить использование не временной таблицы.В динамичсеком SQL по окончании отработки запроса временная таблица удаляется-отсюда и были проблемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2002, 09:04:24 |
|
||
|
Использование результа динамического select в другом selecte
|
|||
|---|---|---|---|
|
#18+
2 Ипатько Игорь: Данные перегоняем так: импорт Btrieve -> XML прогой на Visual FoxPro с использованием библиотеки DBTrieve (заметно быстрее ODBC), экспорт XML-SQL также VFP прогой через ODBC (используя вызовы ХП SQL сервера). Игорь, интересно Ваше мнение о WorkFlow - насколько производительнее стала (по сравнению с DOS версией), если можно тех. характеристики Вашей АБС (к-во рабочих мест, приблизилеьное к-во клиентов и ср. к-во документов в день), как давно работаете на WorkFlow, насколько трудный был переход с DOS версии? Чтобы нам не засорять данный форум пишите сюда: cor@tele-kom.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 08:58:38 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3469&tid=1822502]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 322ms |

| 0 / 0 |
