首页 > 解决方案 > CASE 语句 SQL 处理数据问题

问题描述

我正在尝试创建一个计算来处理棘手的数据问题。

在填充出生日期字段时,我需要测量何时为帐户运行交易。

有时在数据中,一个账户可以有 2 个人,如果只为其中一个人填充了出生日期,并且时间戳相同,那么这将被视为填充了出生日期的交易。在这种情况下,我不想计算第二行的出生日期为空白值。

我一直在尝试在 case 语句中使用 Y/N 标志或 0/1 计数,但我还没有弄清楚如何处理第二个空白行。

这是CASE我一直在使用的基本语句:

SELECT DISTINCT
    [Account_Nbr],
    [Timestmp],
    CASE 
       WHEN [DOB] <> '   ' THEN 'Y' 
       ELSE 'N' 
    END AS 'DOB ORDERED'
FROM 
    TABLE
GROUP BY
    [Account_Nbr], [Timestmp], [DOB]

示例数据如下 - 我想将此标记为已处理并填充 DOB 的事务,但我不希望将空白 DOB 计数或标记为 N

在此处输入图像描述

关于如何处理这个问题的任何想法?谢谢

标签: sqlsql-servercase

解决方案


如果我理解正确,这是从具有多条记录的 account_nbr 中仅返回一行的可能方法

-- Just inserting sample data here.
WITH CTE AS (
SELECT Account_Nbr = 123, Timestmp = GETDATE() , Operator =  1, DOB = '19700101'
UNION ALL
SELECT Account_Nbr = 123, Timestmp = GETDATE() , Operator =  2, DOB = '   ')

--No distinct necessary since it will always group by account_nbr and timestamp.
SELECT  Account_Nbr,
        Timestmp,
        DOB_Ordered = (CASE WHEN MAX(DOB) <> '   '  THEN 'Y' ELSE 'N' END)
FROM CTE
GROUP BY
    [Account_Nbr], [Timestmp]

推荐阅读