SQL 计算列中的值

标签 sql sql-server

刚接触 SQL,需要快速回答。我今天大部分时间都在寻找,需要一个快速的答案,所以如果这是相当基本的,我深表歉意。我正在寻找一种方法来“汇总”此查询中的列。

SELECT 
    Count(case when [BatchNumber] < '100' then 1 else 0 end) as A,
    Count(case when [BatchNumber] like '22%' then 1 else 0 end) as B,
    Count(case when [BatchNumber] like '33%' then 1 else 0 end) as C,
FROM [Database].[dbo].[Transaction]
WHERE [Date] between '2012-01-03' and '2012-01-05'
Group by [Date]

列中的数据类似于:

Date             Batchnumber
2012-01-03       1               
2012-01-03       2                
2012-01-03       3              
2012-01-03       4               
2012-01-03       2201
2012-01-03       2202
2012-01-03       3301
2012-01-03       3302
2012-01-03       3303
2012-01-05       1
2012-01-05       2
2012-01-05       3
2012-01-05       4
2012-01-05       5
2012-01-05       3301
2012-01-05       3302
2012-01-05       3303
2012-01-05       3304

寻找长行的输出:

Date            A          B          c
2012-01-03      4          2          3
2012-01-05      5          0          4

提前感谢您的帮助。

编辑:因为我没有正确提出我最初的问题,所以将其回滚。提供的信息确实回答了最初的帖子。

最佳答案

我不认为你想要 distinct , 你需要一个 GROUP BY :

SELECT Date,
       sum(case when [BatchNumber] < '100' then 1 else 0 end) as A,
       sum(case when [BatchNumber] like '22%' then 1 else 0 end) as B,
       sum(case when [BatchNumber] like '33%' then 1 else 0 end) as C,
FROM [Database].[dbo].[Transaction]
WHERE [Date] between '2012-01-03' and '12-01-05'
GROUP BY Date;

case表达式返回 01 , 所以最大的不同值是 2 .

关于SQL 计算列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65675754/

相关文章:

c# - SQL数据库可以溯源吗?

mysql - 如何通过检查特定字段是否以给定数组中的值开头来进行查询?

jquery - 创建动态 html 表,其中 td 值与 ms sql db 中的 th 值关联

mysql - SQL - 检查列是否自动递增

c# - 使用 pivot 将行转换为列

sql - 当右表中有很多匹配的行时左连接

java - SQlite Android没有这样的表列students.studentId

python - 计算一段时间内值增加和减少的最大总计

sql-server - 如何在没有 UNION 的情况下选择一个父行及其子行的其他行?

sql - "Non-deterministic User-Defined functions can be used in a deterministic manner"是什么意思?