通过对期间进行分组来计算记录数

时间:2021-05-27 18:16:37

标签: sql sql-server tsql

我有一张表,可以根据值存储每天用户是否工作或休假。 示例表,Value = 1 -> WorkDay, Value = 2 -> Vacation

User    | Day        | Value
--------|------------|-------
user-1  | 2021-01-01 | 1
user-1  | 2021-01-02 | 1
user-1  | 2021-01-03 | 1
user-1  | 2021-01-04 | 1
user-1  | 2021-01-05 | 2
user-1  | 2021-01-06 | 2
...

我想把这个表转换成这个(使用上面的简单例子):

User    | Year | Month | WorkDay | Vacation
--------|------|-------|---------|---------
user-1  | 2021 | 01    | 4       | 2
...

我尝试使用 group by、子查询和 case,但整个过程变得一团糟。

SELECT
    YEAR(Day),
    MONTH(DAY),
    User,

    ...

From Table1
Group By YEAR(Day), MONTH(DAY), User

2 个答案:

答案 0 :(得分:1)

只需使用条件聚合:

gcloud pubsub subscriptions create supervisor-subscription \
    --topic supervisor-cron \
    --push-endpoint=$(gcloud run services describe supervisor --format 'value(status.url)' --platform managed --project ${PROJECT_ID}) \
    --push-auth-service-account=cloud-run-pubsub-invoker@${PROJECT_ID}.iam.gserviceaccount.com

答案 1 :(得分:1)

您可以使用如下条件聚合:

window.addEventListener("scroll", (e) => {
  let sat = document.querySelector(".hero-images--sat");
  let scrolled = window.pageYOffset;
  const images = document.querySelectorAll(".hero-image");

  if ((scrolled += 25)) {
    sat.classList.add("appear");
  }
  for (let i = 0; i < images.length; i++) {
    let pos = scrolled * images[i].dataset.rate;

    if (images[i].classList.contains("hero-images--earth")) {
      let pos = scrolled * images[i].dataset.rate - 48.75;
      images[i].style.transform = `translate3d(-50%, ${pos}%, 0px)`;
    } else {
      images[i].style.transform = `translate3d(0%, ${pos}%, 0px)`;
    }
  }
});

.appear {
    opacity: 1;
    transition: all 0.3s linear;
    top: 50%;
}

DB-小提琴:

架构和插入语句:

select User,
       year(day), 
       month(day),
       sum(case when value = 1 then 1 else 0 end) as WorkDay,
       sum(case when value = 2 then 1 else 0 end) as Vacation
from table1
group by User, year(day), month(day)

查询:

 create table table1([User] varchar(50), Day date, Value int);
 insert into table1 values('user-1'  , '2021-01-01' , 1);
 insert into table1 values('user-1'  , '2021-01-02' , 1);
 insert into table1 values('user-1'  , '2021-01-03' , 1);
 insert into table1 values('user-1'  , '2021-01-04' , 1);
 insert into table1 values('user-1'  , '2021-01-05' , 2);
 insert into table1 values('user-1'  , '2021-01-06' , 2);

输出:

<头>
用户 工作日 假期
user-1 2021 1 4 2

dbhere

相关问题