如何解决CASE语句SQL处理数据问题
我正在尝试创建一个计算来处理棘手的数据问题。
我需要测量何时填写出生日期字段时帐户的交易。
有时在数据中,一个帐户上可以有2个人,并且如果仅填充其中一个人的出生日期,并且时间戳记相同,则这将被视为包含出生日期的交易。我不想在这种情况下计算第二行,该行的出生日期值为空白。
我一直在使用case语句中的Y / N标志或0/1 Count进行操作,但是我还没有弄清楚如何处理第二行空白。
这是我一直在使用的基本CASE
语句:
SELECT DISTINCT
[Account_Nbr],[Timestmp],CASE
WHEN [DOB] <> ' ' THEN 'Y'
ELSE 'N'
END AS 'DOB ORDERED'
FROM
TABLE
GROUP BY
[Account_Nbr],[DOB]
样本数据如下-我想将其标记为已填充DOB的事务,但是我不希望空白DOB被计数或标记为N
有关如何处理此问题的任何想法?谢谢
解决方法
如果我没正确理解的话,这可能是从具有多个记录的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,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]
,
我认为您希望使用CASE
表达式进行聚合:
SELECT Account_Nbr,(CASE WHEN COUNT(*) = COUNT(DOB) THEN 'Y' ELSE 'N'
END) as missing_dob_flag
FROM TABLE
GROUP BY [Account_Nbr],[Timestmp]
合理地假设将名为DOB
(出生日期)的列存储为日期。日期应作为日期存储在数据库中。如果不是这种情况,则应该修复数据模型。
如果您对别人对数据类型的错误决定感到困惑,可以使用TRY_CONVERT()
:
SELECT Account_Nbr,(CASE WHEN COUNT(*) = COUNT(TRY_CONVERT(DATE,DOB)) THEN 'Y' ELSE 'N'
END) as missing_dob_flag
FROM TABLE
GROUP BY [Account_Nbr],[Timestmp];
请注意,转换可能需要格式参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。