2016-05-06 7 views
10
SELECT c.PROCESS_ID, 
     CASE WHEN c.PAYMODE = 'M' 
      THEN 
       CASE WHEN CURRENCY = 'USD' 
        THEN c.PREMIUM * c.RATE 
        ELSE c.PREMIUM END * 12 
      ELSE 
       CASE WHEN CURRENCY = 'USD' 
        THEN c.PREMIUM * c.RATE 
        ELSE c.PREMIUM END END VAlue 
FROM CMM c 

voglio convertire query SQL scintilla sql api come posso fare?come scrivere caso quando la condizione in scintilla SQL utilizzando Scala

grazie

+0

Hai provato a 'registerTempTable' e quindi a' sqlContext.sql ("...") '? –

+0

ciao grazie per la tua risposta ho fatto quella cosa ma voglio usare l'api quindi hai qualche idea su come farlo? – praveen

+2

Praveen: Puoi prendere in considerazione l'accettazione della risposta @David Griffin. Sarebbe il puntatore anche per gli altri utenti.Thx –

risposta

26

Se state cercando il modo per farlo utilizzando Column gli oggetti, si può fare una traduzione letterale in questo modo:

val df: DataFrame = ... 

df.select(
    col("PROCESS_ID"), 
    when(col("PAYMODE") === lit("M"), 
    (when(col("CURRENCY") === lit("USD"), col("PREMIUM") * col("RATE")) 
    .otherwise(col("PREMIUM"))) * 12 
).otherwise(
    when(col("CURRENCY") === lit("USD"), col("PREMIUM") * col("RATE")) 
    .otherwise(col("PREMIUM")) 
) 
) 

Probabilmente un modo più pulito per farlo, però, è fare qualcosa di simile:

df.withColumn(
"result", 
    when(col("CURRENCY") === lit("USD"), col("PREMIUM") * col("RATE")) 
    .otherwise(col("PREMIUM")) 
).withColumn(
    "result", 
    when(col("PAYMODE") === lit("M"), col("result") * 12) 
    .otherwise(col("result")) 
) 

almeno, il secondo è molto più facile da leggere a me.

+0

Grazie mille :) – praveen

+6

Prego, sentitevi liberi di accettare la mia risposta ';-)' –