【问题标题】:Rows in their own columns depending on their date and symbolized by 'x'行在自己的列中,具体取决于日期并用“x”表示
【发布时间】:2010-03-19 04:26:19
【问题描述】:

亲爱的,请帮助我,因为我是 SQL Server 的新手。我有一个当前产生以下结果的选择查询:

医生姓名 团队 访问日期
博士。作为 一种 5
博士。 Sc 一种 4
博士。 GH B 6
博士。 Nd C 31
dr As A 7

使用以下查询: 选择 d.DoctorName, t.TeamName, ca.VisitDate FROM cActivity AS ca INNER JOIN 医生 AS d ON ca.DoctorId = d.Id INNER JOIN 团队 AS t ON ca.TeamId = t.Id WHERE ca.VisitDate BETWEEN '1/1/2010' AND '1/31/2010'

我想制作以下内容:

DoctorName 团队 1 2 3 4 5 6 7 ... 31 已访问
博士。作为                         x    x ...     2 次
博士。 Sc A                      x       ...     1 次
博士。 Gh   B                            x ...     1 次
博士。 Nd   C                             ... x      1 次

【问题讨论】:

标签: sql-server datetime pivot


【解决方案1】:

用途:

  SELECT d.doctorname,
         t.teamname,
         MAX(CASE WHEN ca.visitdate = 1 THEN 'x' ELSE NULL END) AS 1,
         MAX(CASE WHEN ca.visitdate = 2 THEN 'x' ELSE NULL END) AS 2,
         MAX(CASE WHEN ca.visitdate = 3 THEN 'x' ELSE NULL END) AS 3,
         ...
         MAX(CASE WHEN ca.visitdate = 31 THEN 'x' ELSE NULL END) AS 31,
         COUNT(*) AS visited
    FROM CACTIVITY ca
    JOIN DOCTOR d ON d.id = ca.doctorid 
    JOIN TEAM t ON t.id = ca.teamid
   WHERE ca.visitdate BETWEEN '1/1/2010' AND '1/31/2010'
GROUP BY d.doctorname, t.teamname

【讨论】:

  • 你能帮我把列变成动态的吗?我的意思是让它不仅是 31,还可以是 28、30、31?
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多