SQL 查询 When Then 并计数

SQL Query for When Then and Count

我有一个table

ID |Code   |Start      |End
1  | SKX007| 2020-06-01|2020-06-11
2  | SRP120| 2020-05-01|2020-05-01
3  | SKX454| 2020-05-01|2020-06-21
4  | SKX471| 2020-06-11|2020-06-15

我想知道在哪里打印代码的前 3 个字母以及它的计数从 jun 开始或结束。

Code |"Count Code in June"
SKX  |  3

目前我有这个

SELECT 
    CASE 
      WHEN Code LIKE 'SKX%'
          THEN 'SKX'

      WHEN Code LIKE 'SRP%'
          THEN 'SRP'
    END AS 'Start Code'

SELECT COUNT(Code) AS "Count Code in June" from Loan
    WHERE MONTH(Start) = 6 or MONTH(End) = 6;

如何将这 2 个语句合并在一起?

合并语句的最简单方法是

SELECT COUNT(CASE 
      WHEN Code LIKE 'SKX%'
          THEN 'SKX'

      WHEN Code LIKE 'SRP%'
          THEN 'SRP'
    END ) AS "Count Code in June", CASE 
      WHEN Code LIKE 'SKX%'
          THEN 'SKX'

      WHEN Code LIKE 'SRP%'
          THEN 'SRP'
    END AS 'Start Code' from Loan
    WHERE MONTH(Start) = 6 or MONTH(End) = 6
group by CASE 
      WHEN Code LIKE 'SKX%'
          THEN 'SKX'

      WHEN Code LIKE 'SRP%'
          THEN 'SRP'
    END 

Im trying to get where i print the first 3 letter of the code and the count of it start or end in jun.

我建议:

select left(code, 3) as code_3, count(*)
from loan
where month(start) = 6 or month(end) = 6
group by code_3;

注意:要月份不要年份是非常非常少见的。如果你想要 2020 年 6 月,那么你会想要:

select left(code, 3) as code_3, count(*)
from loan
where (start >= '2020-06-01' and start < '2020-07-01') or
      (end >= '2020-06-01' and end < '2020-07-01')
group by code_3;

然后这将不包括在 6 月 活动 但开始之前和之后结束的行。所以你可能真的想要任何重叠:

select left(code, 3) as code_3, count(*)
from loan
where start < '2020-07-01' and
      end >= '2020-06-01'
group by code_3;