动态SQL查询以使用其他列中的值填充列

时间:2014-11-05 22:41:22

标签: mysql sql sql-server-2008

我正在尝试为数据质量报告编写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列,具体取决于帐号和问题列。

1 个答案:

答案 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值,将查询包装在子查询中并从中进行选择。如果你需要一只手,请给我一个大喊。