【问题标题】:Grouping shortened string and unshortened string from a case expression into a count将 case 表达式中的缩短字符串和未缩短字符串分组为计数
【发布时间】:2019-06-24 09:41:45
【问题描述】:

抱歉,如果我没有很好地解释这一点或没有提供足够的信息。

我正在尝试使用 count 组合数字,但我遇到了一个问题,即我的 case 表达式中的数据没有组合在一起。

需要case语句来处理NUMBER列中需要去除前缀的不同类型代码:

T123456
123456

这是代码示例:

选择 案子 当 left(NUMBER,1) = 't' 然后 RIGHT(NUMBER, 6) 其他号码 以用户身份结束,计数(登录) 从访问 通过...分组 案子 当 left(NUMBER,1) = 't' 然后 RIGHT(NUMBER, 6) 其他号码 结束

我的查询应该返回一组“数字”以提供组合总数,而不是两个单独的行。

This:
123456  10
Not this:
123456  7
123456  3

【问题讨论】:

  • 你在 select 和 group by 中都使用这个 case 语句吗?
  • 您应该发布完整的查询。
  • 如果有帮助,我已经尝试在上面进行扩展。原始查询很大,所以不会全部显示,我认为上面基本上是我需要修复的。

标签: sql-server group-by count


【解决方案1】:

我想你的查询是

SEELCT case 
when left(NUMBER,1) = 't' then RIGHT(NUMBER, 6) 
else NUMBER 
end as User, col1
FROM table

请改成:

SEELCT case 
when left(NUMBER,1) = 't' then RIGHT(NUMBER, 6) 
else NUMBER 
end as User, SUM(col1)
FROM table
GROUP BY case 
when left(NUMBER,1) = 't' then RIGHT(NUMBER, 6) 
else NUMBER 
end

【讨论】:

  • 感谢您的帮助,但我认为我的查询肯定还有其他问题,我没有包括查看此答案。我有其他列使用 isnulls 引用其他表,所以这可能使行更加不同。
【解决方案2】:

对不起,我在这方面分享的信息不足,我现在找到了答案。

这是对我的查询的更好解释:

SELECT case when left(A.NUMBER,1) = 't' then RIGHT(A.NUMBER, 6) else NUMBER end as User, Count(a.login) from Access A Left join Logins L On L.LoginID = A.number group by case when left(NUMBER,1) = 't' then RIGHT(NUMBER, 6) else NUMBER end

最终对“On”子句产生了脑波,并将其与上面的 case 语句结合在一起

现在它将所有相同的数字组合在一起

【讨论】:

    猜你喜欢
    • 2017-11-11
    • 2011-04-28
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    相关资源
    最近更新 更多