【问题标题】:SQL Query for When Then and CountSQL 查询When Then 和 Count
【发布时间】:2021-11-02 17:46:57
【问题描述】:

我有一张桌子

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;

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

【问题讨论】:

  • 您的开始和结束列真的是三个字母月份的缩写,还是它们实际上存储完整的日期?
  • 它们是完整的日期格式。

标签: mysql sql ssms


【解决方案1】:

合并语句的最简单方法是

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 

【讨论】:

  • 如果我只想在 count 大于 2 时显示,我可以在哪里插入 having 语句?
【解决方案2】:

我试图找到我打印代码的前 3 个字母的位置以及它的计数在 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多