Ich muss eine Funktion erstellen, die einen Variablennamen und eine Operation erhält und erstellt den Code in Sql ausgeführt werden. Ich schrieb eine Funktion:R- Funktion zum Einfügen von Text - NULL-Wort in ihm
texto <- function(var,opera) {
paste0(
opera, '(b.', var, ') as ', var, '_', opera, '_12,', '\n',
opera, '(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M6 then b.', var, ' else 0 end) as ', var,'_', opera,'_6,', '\n',
opera, '(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M3 then b.', var, ' else 0 end) as ', var,'_', opera,'_3,', '\n',
opera, '(case when(b.cd_Anio*100+b.cd_Mes)=a.cd_periodo_observacion then b.', var, ' else 0 end) as ', var,'_', opera,'_1,'
)
}
Mit Liste von Variablen und Operationen:
vars <- list('vl_Saldo_Prom_Deu_Aco', 'vl_Saldo_Prom_Deu_Exc')
ops <- list('sum', 'max')
Ich betreibe eine Schleife:
for (i in vars) {
for (j in ops) {
print(cat(texto(i,j)))
}
}
Und ich bekomme:
sum(b.vl_Saldo_Prom_Deu_Aco) as vl_Saldo_Prom_Deu_Aco_sum_12,
sum(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M6 then b.vl_Saldo_Prom_Deu_Aco else 0 end) as vl_Saldo_Prom_Deu_Aco_sum_6,
sum(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M3 then b.vl_Saldo_Prom_Deu_Aco else 0 end) as vl_Saldo_Prom_Deu_Aco_sum_3,
sum(case when(b.cd_Anio*100+b.cd_Mes)=a.cd_periodo_observacion then b.vl_Saldo_Prom_Deu_Aco else 0 end) as vl_Saldo_Prom_Deu_Aco_sum_1,NULL
max(b.vl_Saldo_Prom_Deu_Aco) as vl_Saldo_Prom_Deu_Aco_max_12,
max(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M6 then b.vl_Saldo_Prom_Deu_Aco else 0 end) as vl_Saldo_Prom_Deu_Aco_max_6,
max(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M3 then b.vl_Saldo_Prom_Deu_Aco else 0 end) as vl_Saldo_Prom_Deu_Aco_max_3,
max(case when(b.cd_Anio*100+b.cd_Mes)=a.cd_periodo_observacion then b.vl_Saldo_Prom_Deu_Aco else 0 end) as vl_Saldo_Prom_Deu_Aco_max_1,NULL
sum(b.vl_Saldo_Prom_Deu_Exc) as vl_Saldo_Prom_Deu_Exc_sum_12,
sum(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M6 then b.vl_Saldo_Prom_Deu_Exc else 0 end) as vl_Saldo_Prom_Deu_Exc_sum_6,
sum(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M3 then b.vl_Saldo_Prom_Deu_Exc else 0 end) as vl_Saldo_Prom_Deu_Exc_sum_3,
sum(case when(b.cd_Anio*100+b.cd_Mes)=a.cd_periodo_observacion then b.vl_Saldo_Prom_Deu_Exc else 0 end) as vl_Saldo_Prom_Deu_Exc_sum_1,NULL
max(b.vl_Saldo_Prom_Deu_Exc) as vl_Saldo_Prom_Deu_Exc_max_12,
max(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M6 then b.vl_Saldo_Prom_Deu_Exc else 0 end) as vl_Saldo_Prom_Deu_Exc_max_6,
max(case when(b.cd_Anio*100+b.cd_Mes)>=a.cd_periodo_observacion_M3 then b.vl_Saldo_Prom_Deu_Exc else 0 end) as vl_Saldo_Prom_Deu_Exc_max_3,
max(case when(b.cd_Anio*100+b.cd_Mes)=a.cd_periodo_observacion then b.vl_Saldo_Prom_Deu_Exc else 0 end) as vl_Saldo_Prom_Deu_Exc_max_1,NULL
Welche ist fast in Ordnung, außer für das NULL-Wort. Ich würde gerne wissen, warum es gedruckt wird und wie man es vermeidet.