Sql server SSIS结果列名中基于每行可用值的case语句
我需要在SSIS中编写一个case语句,我必须基于每行中可用的值填充该语句的列名 我从这里的一些帖子中得到了一些想法,但我被困在如何填充列名的问题上,我不想硬编码列名,除非没有其他方法Sql server SSIS结果列名中基于每行可用值的case语句,sql-server,ssis,ssis-2012,Sql Server,Ssis,Ssis 2012,我需要在SSIS中编写一个case语句,我必须基于每行中可用的值填充该语句的列名 我从这里的一些帖子中得到了一些想法,但我被困在如何填充列名的问题上,我不想硬编码列名,除非没有其他方法 Assetname |SP Rating|InHouse |Moody |RatingCounter ----------------------------------------------- ABC | | A+ | AB | ------------------
Assetname |SP Rating|InHouse |Moody |RatingCounter
-----------------------------------------------
ABC | | A+ | AB |
------------------------------------------------
XYZ | B+ | A+ | AA+ |
------------------------------------------------
PQR | BBB | | B+ |
------------------------------------------------
MNC | | | |
-------------------------------------------------
IIR | | AAA+ | |
-------------------------------------------------
我有两个要求第一部分我已经做了,但我不知道如何做下一部分。
如果它是SQL,我会取得更大的进步,但我不擅长SSIS
要求1
使用每个资产的可用评级数量计数填充评级计数器
解决方案:-我在派生列中编写了此逻辑,以计算非空值并将其相加
!ISNULL([Moody]) ? 1 : 0) + (!ISNULL([SP Rating]) ? 1 : 0) +(!ISNULL([InHouse]) ? 1 : 0)
还有其他更好的方法吗
要求2
这有点复杂。我需要添加另一个派生列“Rating Source”
并根据评级计数器填充它
- 案例评级计数器=0:则为空
- Case Rating COunter=1:然后是提供程序的列标题 (例如,对于最后一行,IIR评级来源为“内部”)
- 案例评级计数器=2如果案例2评级可用,则采用更差的评级 (例如,资产ABC评级来源的第一行为穆迪评级(因为AB比A差+),或资产PQR的第三行为“SP评级”,因为BBB比B差+
- 案例评级计数器=3 当3个等级可用时,以第二行的中间等级为例,XYZ AA+是最好的,A+是中间的,B+更差。我们必须为A+选择列标题,该标题为“内部”
我不知道如何在SSIS中做到这一点。任何指针都会很感激您对需求1的处理方法很好。2尽管如此。2由于您的上一个业务规则,它是很棘手的。通常,您所看到的是一个Unpivot操作(将您的宽表变成一个高表),然后类似于聚合的东西将满足0/1/2(虽然您需要提供一个映射以确保B+在BBB上正确排序)。可能是条件拆分,然后是评级计数器3的脚本组件。要求2足够复杂,我将立即进行脚本转换。