|
|
|
Сложное условие
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Есть такая задача. в первом блоке (with) вытаскивается 10 счетов, во втором 20 счетов. в результирующем селекте идет линк (LEFT JOIN) к первому и второму блоку. и в этом сеекте нужно поставить условие что если берется счет из первого блока, то условие расчета одно, для всех остальных счетов (т.е. счетов второго блока) условие расчета другое with with1 as (select acc_number1, sum(amount1) as amount1 from table1 group by acc_number1 ), with2 as (select acc_number2, sum(amount2) as amount2 from table2 group by acc_number2) select если счет with1.acc_number1 то sum(table2.amount-with1.amount1) иначе sum(table2.corr_amount-with1.amount1) from table 2 left join with1 on with1.acc_number1 = table2.acc_number left join with2 on with2.acc_number2 = table2.acc_number where ... Подскажите пожалуйста как это можно реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 12:03 |
|
||
|
Сложное условие
|
|||
|---|---|---|---|
|
#18+
hum_i, юнион никак не поможет гиганту мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 12:04 |
|
||
|
Сложное условие
|
|||
|---|---|---|---|
|
#18+
andreymx, а ежели table2.acc_number и в with1 и в with2 попадет? имхо, достаточно acc_number[x] на is null проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 12:08 |
|
||
|
Сложное условие
|
|||
|---|---|---|---|
|
#18+
Если юнион нельзя то.. with1 as (select acc_number1, sum(amount1) as amount1 from table1 group by acc_number1 ), with2 as (select acc_number2, sum(amount2) as amount2 from table2 group by acc_number2) select case when with1.acc_number1 is not null then sum(table2.amount-with1.amount1) when with12acc_number1 is not null then sum(table2.corr_amount-with1.amount1) else 0 end from table 2 left join with1 on with1.acc_number1 = table2.acc_number left join with2 on with2.acc_number2 = table2.acc_number where ... что то типа такого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:41 |
|
||
|
Сложное условие
|
|||
|---|---|---|---|
|
#18+
PlohoyЕсли юнион нельзя то.. with1 as (select acc_number1, sum(amount1) as amount1 from table1 group by acc_number1 ), with2 as (select acc_number2, sum(amount2) as amount2 from table2 group by acc_number2) select case when with1.acc_number1 is not null then sum(table2.amount-with1.amount1) when with12acc_number1 is not null then sum(table2.corr_amount-with1.amount1) else 0 end from table 2 left join with1 on with1.acc_number1 = table2.acc_number left join with2 on with2.acc_number2 = table2.acc_number where ... что то типа такого Спасибо) Я нашла решение в виде nvl2, но case тоже подходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:51 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39344697&tid=1887051]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 429ms |

| 0 / 0 |
