2012-03-15 7 views
1

Я хочу использовать заявление о делах в Pervasive, так как ему не хватает поддержки Coalesce. Но похоже, что Pervasive 8 также не поддерживает заявления Case.Дело в Pervasive 8

Так что я хотел проверить, есть ли альтернативное решение моей проблемы.

SELECT top 100 
STOCKTR.PHEADPR, 
'' as tom 
,case Pheadpr.BLNO when <> '' then Pheadpr.BLNO else STOCKTR.PHEADPR end as BLNO 
,Pheadpr.custno 
,Pheadpr.cust_name 
,Pheadpr.company_name 
,Pheadpr.company_city 
,Pheadpr.invno 
,Pheadpr.curr_code 
,STOCKTR.RECID 
,STOCKTR.ARTNO 
,STOCKTR.DATE 
,STOCKTR.QTY_PCS 
,STOCKTR.PRICE_SEK_PCS 
,STOCKTR.ULAND 
FROM STOCKTR INNER JOIN PHEADPR 
ON PHEADPR.NO = STOCKTR.PHEADPR 
WHERE STOCKTR.TRCODE='02' AND STOCKTR.PHEADPR <> '0' 
order by STOCKTR.DATE desc 

Так что мой вопрос сосредоточен на четвертой строке в моем отборном заявлении, что говорит

case Pheadpr.BLNO when <> '' then Pheadpr.BLNO else STOCKTR.PHEADPR end as BLNO 

И я хочу, чтобы это привести к выходу 1 столбца. Есть ли способ обойти это в распространении 8, чтобы я мог получить поведение, подобное тому, что было из моего запроса?

В качестве побочного я использую драйвер JDBC и выполняю запрос из программы Java.

ответ

1

Вы можете использовать оператор IF. Синтаксис будет:

IF (поиск условие, выражение, выражение)

Таким образом, в вашем случае, вероятно, потребуется что-то вроде:

IF (Pheadpr.BLNO <> '', Pheadpr.BLNO, STOCKTR.PHEADPR) в BLNO

Если это вообще возможно, вам следует рассмотреть вопрос о повышении на дворняжка аренда версии PSQL V11 поддерживает как операторы CASE, так и COALESCE, а также поддерживаемую версию PSQL.