sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertera CASE-uttryck i SQL till härledd kolumn i SSIS

Moralen i följande berättelse är att bara för att du kan gör något i SSIS, det är inte alltid en bra idé.

Ett exempel, denna fråga. Det skulle vara mycket mer effektivt att använda den befintliga sql-logiken för att generera det slutliga värdet än att använda härledda kolumner eller en skriptuppgift i SSIS (för att inte tala om slöseri med pipelineminne, CPU, etc)

Källfråga

Jag använde följande som en källfråga.

SELECT '50%' AS FixedARMRateReductionLimit, .1 AS PARAM_VAL_TXT
UNION ALL  SELECT 'Weekly PMMS Rate' AS FixedARMRateReductionLimit, .3 AS PARAM_VAL_TXT
UNION ALL  SELECT 'Frack',  .5

Hitta procentposition

Bestäm om det finns en procentsymbol i kolumnen. Detta skapar en kolumn som heter PercentPosition

FINDSTRING(FixedARMRateReductionLimit, "%",1)

Sök efter betygstext

Det borde vara tillräckligt att göra en enkel jämförelse som det första uttrycket visar, men jag hade problem med det. Jag antar att det är en strängkonvertering/jämförelse problem (se första anmärkningen). Istället för att pyssla med att få ett booleskt värde använde jag findstring för att generera ordningspositionen.

FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)

Hämta utdata

Njut av dubbel användning av Ternary operator .

(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100

Du kunde ha förenklat en del av detta i en skriptuppgift men jag skulle bara göra logiken i källan.



  1. hur skapar man inloggningssida i Android-appen?

  2. SQL - spelar ordning på ELLER-villkoren någon roll?

  3. Spring Data JPA nollvärde i kolumn xxx bryter mot noll-begränsning på seriell kolumn med postgresql

  4. Google Cloud Dataflow användardefinierad MySQL-källa