2010-03-19 21 views
1

亲爱的所有人,请帮助我,因为我是SQL Server中的新手。我目前将产生以下结果选择查询:根据他们的日期排列的行,取决于他们的日期并以'x'表示

DoctorName 队 访问日期
博士。作为 甲 博士。 Sc A dr。 Gh B 6
dr。 ND C 31
博士为A 7

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

我想产生如下:

DoctorName团队1 2 3 4 5 6 7 ... 31访问
dr。作为一个                                              X     X ...         2倍
博士。 SC  一个                                        X           ...         1次
博士。GH  乙                                                  X ...         1次
博士。钕 ç                                                  ... X         1次
+0

您正在使用什么版本的SQL Server? – 2010-03-19 04:55:42

+0

我使用sql server 2008 ..你能帮我回答我的问题吗? http://stackoverflow.com/questions/2475893/finding-numbers-of-days-between-two-date-to-make-a-dynamic-columns – Chandradyani 2010-03-19 08:35:31

回答

0

使用:

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 
+0

你能帮我把它变成动态列吗?我的意思是不只是31,但也可以28,30,31? – Chandradyani 2010-03-19 04:45:29

相关问题