sql >> Database >  >> RDS >> Sqlserver

Converteer CASE-expressie in SQL naar afgeleide kolom in SSIS

De moraal van het volgende verhaal is dat alleen omdat je kunt iets doen in SSIS, het is niet altijd een goed idee.

Een goed voorbeeld, deze vraag. Het zou veel efficiënter zijn om de bestaande sql-logica te gebruiken om de uiteindelijke waarde te genereren dan het gebruik van afgeleide kolommen of een scripttaak in SSIS (om nog maar te zwijgen van de verspilling van pijplijngeheugen, CPU, enz.)

Bronquery

Ik heb het volgende als bronquery gebruikt.

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

Percentage positie zoeken

Bepaal of er een percentagesymbool in de kolom staat. Dit creëert een kolom met de naam PercentPosition

FINDSTRING(FixedARMRateReductionLimit, "%",1)

Controleer op tarieftekst

Het zou voldoende moeten zijn om een ​​eenvoudige vergelijking te maken, zoals de eerste uitdrukking laat zien, maar ik had er problemen mee. Ik neem aan dat het een stringconversie/vergelijking is probleem (zie eerste opmerking). In plaats van te rommelen met het verkrijgen van een booleaanse waarde, gebruikte ik findstring om de ordinale positie te genereren.

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

Uitvoer afleiden

Profiteer van het dubbele gebruik van de Ternary-operator .

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

Je had een deel hiervan kunnen vereenvoudigen in een scripttaak, maar ik zou gewoon de logica in de broncode doen.



  1. MySQL:FOUT 1227 (42000):Toegang geweigerd - Kan GEBRUIKER niet MAKEN

  2. PostgreSql, extraheer schema-objecten DDL om het SQL-bestand te scheiden

  3. Op zoek naar een juiste EAV-structuur op basis van jsonb

  4. Hoe kan ik met MySQL een kolom met de recordindex in een tabel genereren?