|
|
|
динамически создаваемое VIEW
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Не подскажите, как обойти при динамическом создании VIEW ограничение на длину строки в 8000 символов. Если создавать VIEW ч/з Server Manager то он вмещает и большее количество символов. Для создания VIEW заношу в @sql(varchar(8000)) соответсткующую строку: "CREATE VIEW AS SELECT ..." но дело в том что SELECT составляется с пом. UNION - ов, они формируются динамически и их получается много. Поэтому в 8000 символов не помещается :-(. Как быть? Может по-другому составить VIEW, но у меня по-другому что-то не получается. Может кто подскажет: select ID_reg, ID_prd, CASE WHEN ID_prd=1 THEN SUM(KZal) ELSE SUM(KZal)-SUM(Korrect) END SerZal, CASE WHEN ID_prd=1 THEN NULL ELSE SUM(Korrect) END Korrect, CASE WHEN ID_prd=1 THEN NULL ELSE SUM(KZal) END KorSerZal, CASE WHEN SUM(KZal)=0 THEN 0 ELSE ROUND(SUM(PrDoh)/SUM(KZal)*100*(CASE WHEN ID_prd=1 THEN 1 ELSE 4 END),1) END PrStav, SUM(PrDoh) PrDoh from VKreditData where ID_kln=4 and ID_krS IN (81,70) and ID_prd IN (1,2,3,4,5) group by ID_reg,ID_prd UNION select ID_reg, ID_prd, CASE WHEN ID_prd=1 THEN SUM(KZal) ELSE SUM(KZal)-SUM(Korrect) END SerZal, CASE WHEN ID_prd=1 THEN NULL ELSE SUM(Korrect) END Korrect, CASE WHEN ID_prd=1 THEN NULL ELSE SUM(KZal) END KorSerZal, CASE WHEN SUM(KZal)=0 THEN 0 ELSE ROUND(SUM(PrDoh)/SUM(KZal)*100*(CASE WHEN ID_prd=1 THEN 1 ELSE 4 END),1) END PrStav, SUM(PrDoh) PrDoh from VKreditData where ID_kln=4 and ID_krS=81 and ID_prd IN (1,2,3,4,5) group by ID_reg,ID_prd UNION ... и т.д. SELECT-ы отличаются только в WHERE условиями для ID_krS и ID_kln Подскажите пожалуйста, целый день с ним мучаюсь . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 19:23:56 |
|
||
|
динамически создаваемое VIEW
|
|||
|---|---|---|---|
|
#18+
Вообще-то exec поддерживает конкатенацию переменных, т.е. exec(@var + @var2 + ...) только мне совершенно непонятно зачем объединять наборы, которые покрывают друг друга where ID_kln=4 and ID_krS IN (81,70) and ID_prd IN (1,2,3,4,5) where ID_kln=4 and ID_krS= 81 and ID_prd IN (1,2,3,4,5) да еще через UNION, т.е. с удалением повторяющихся записей ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 21:06:16 |
|
||
|
динамически создаваемое VIEW
|
|||
|---|---|---|---|
|
#18+
Первое, что пришло на ум: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Т.е. создаёшь постоянный вид, а динамические виды (1,2...n) делаешь под него. А вообще это пожалуй глупая идея и Glory прав, какой смысл тормозить UNION ами если можно правильно сформировать динамическое WHERE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2002, 09:04:34 |
|
||
|
динамически создаваемое VIEW
|
|||
|---|---|---|---|
|
#18+
Дело в том, что каждый SELECT - это строка отчетной формы для различных значений ID_prd, ID_reg. В отчетной форме есть строки соответствующие одному элементу ID_krS (ID_krS=81), а есть суммирующие две или больше строки (krS IN (81,70)), кстати записи не удаляются поскольку они не повторяющиеся (группировка: group by ID_reg,ID_prd) . Как сделать чтобы в даном случае обе эти строки попали в результатирующее VIEW без UNION, не знаю, у меня не получается. Сохранить во VIEW мне хочется (хотя можно сделать вывод во временную таблицу - этот вариант вобщем-то работает) чтобы затем можно было "покрутить" эти данные через VIEW для анализа - по разным ID_reg, ID_prd. Может, действительно, это "не тот путь"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2002, 10:22:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32048630&tid=1820555]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 350ms |

| 0 / 0 |
