我正在尝试为数据质量报告编写SQL查询,该报告将多列中的数据质量失败值显示为一列。请参阅以下示例
FACT TABLE
Ac_Nm INAmt Ast Rcs
123 100 5000 NA
456 200 -200 Yes
789 -300 1000 No
期望的输出(人口大众专栏)
Ac_Nm Is_Clm Val
123 RCS NA
456 Ast -200
789 InAmt -300
如何编写SQL查询来填充Val列?我已经编写了剩余的数据质量报告查询。
在上面的例子中,我有一个事实表,其中已经在各列中识别出数据质量问题(负值,'NA'值,其中应该有是/否响应等)。我想知道如何编写一个动态SQL查询,根据帐号和列名返回事实表中的失败值。在第一行中,所需的输出列出了帐号(123),其中发行列名称(RCS)包含有争议的值,Val列列出了导致问题的值(NA)。我只需要知道如何编写SQL查询来填充Val列,具体取决于帐号和问题列。
答案 0 :(得分:0)
你可以使用case语句来做,假设只有一列会有一个“坏”值,如下所示:
SELECT Ac_Nm,
CASE WHEN INAmt < 0 THEN 'INAmt'
WHEN Ast < 0 THEN 'Ast'
WHEN Rcs = 'N/A' THEN 'RCS'
ELSE NULL END AS Is_Clm,
CASE WHEN INAmt < 0 THEN CONVERT(INAmt, char)
WHEN Ast < 0 THEN CONVERT(Ast, char)
WHEN Rcs = 'N/A' THEN Rcs
ELSE NULL END AS Val
FROM fact_table;
然后过滤掉NULL值,将查询包装在子查询中并从中进行选择。如果你需要一只手,请给我一个大喊。