【发布时间】:2017-04-20 18:24:38
【问题描述】:
我有一个 SQL,它使用 case 语句来组合两个字段和一个带有计数的 groupby。 我的查询工作没有错误,但它没有对具有两个不同名称但在 case 语句中具有相同名称的数据进行分组/计数。
SELECT EMPLY,
Case when CCode = 'L1' then 'LongTerm'
when CCode = 'D1' then 'ShortTerm'
when RPolicy = 'C1' then 'Custom'
when RPolicy = 'H1' then 'Custom' end AS [FileType],
Count(AccountNumber) AS Total
FROM dbo.Accounts
WHERE Date like '%2017%'
GROUP BY EMPLY, RPolicy, CCode
ORDER BY 1
我需要知道如何按我的新列“文件类型”进行分组?
输出:
EMPLY File Type Total
EMPLY1 LongTerm 12
EMPLY1 Custom 1
EMPLY1 Custom 5
EMPLY1 ShortTerm 3
EMPLY2 LongTerm 16
EMPLY2 Custom 3
EMPLY2 Custom 6
EMPLY2 ShortTerm 8
EMPLY3 LongTerm 20
EMPLY3 Custom 2
EMPLY3 Custom 10
EMPLY3 ShortTerm 4
任何帮助将不胜感激。 我正在使用 AQT/SQL Server
【问题讨论】:
-
按案例陈述分组。并使用。从组中消除 RPolicy、CCode。注意:如果您有 ccode L1 和 RPolicy H1 的记录,那么文件类型将是 longTerm,它不能同时是两者。如果找到第一个匹配项,则案例存在一次。
-
您的输出是因为您按 RPolicy 分组。和 C 代码。你的 group by 应该只是
GROUP BY Emply, Case when CCode = 'L1' then 'LongTerm' when CCode = 'D1' then 'ShortTerm' when RPolicy = 'C1' then 'Custom' when RPolicy = 'H1' then 'Custom' end如果你得到相同的结果,那么你还没有消除 RPolicy 和 CCode。