有关sql server 2008考勤报告的查询
我有一张桌子供你的学生用有关sql server 2008考勤报告的查询,sql,sql-server-2008,Sql,Sql Server 2008,我有一张桌子供你的学生用 s_id | name -----+------- 1 | peter 2 | robert 3 | stive 还有一张桌子,不限出席人数 id | s_id | status | date ---+------+--------+---------- 1 | 1 | p | 5-16-2014 2 | 2 | p | 5-16-2014 3 | 3 | a | 5-16-2014 4 |
s_id | name
-----+-------
1 | peter
2 | robert
3 | stive
还有一张桌子,不限出席人数
id | s_id | status | date
---+------+--------+----------
1 | 1 | p | 5-16-2014
2 | 2 | p | 5-16-2014
3 | 3 | a | 5-16-2014
4 | 1 | p | 5-17-2014
5 | 2 | a | 5-17-2014
6 | 3 | a | 5-17-2014
7 | 1 | p | 5-18-2014
8 | 2 | a | 5-18-2014
9 | 3 | p | 5-18-2014
我想以这种格式显示结果
s_id | name | 5-16-2014 | 5-17-2014 | 5-18-2014
1 | peter | p | p | p
2 | robert | p | a | a
3 | stive | a | a | p
选择应基于:
- 本周
- 这个月
如果是基于这个月,我希望在结果中包含当月的30天
谢谢您可以尝试以下方法,也可以通过稍加更改来使用
CREATE TABLE [dbo].[Student](
[ID] [int] NULL,
[Name] [varchar](50) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Attendance](
[ID] [int] NOT NULL,
[S_ID] [int] NOT NULL,
[Status] [char](1) NOT NULL,
[Date] [datetime] NOT NULL
) ON [PRIMARY]
-- Inset values to the above tables.
DECLARE @Dates VARCHAR(MAX),
@Sql VARCHAR(Max)
SELECT @Dates = stuff((select distinct ',['+ CONVERT(VARCHAR,Date,106) + ']' from Attendance for xml path('')),1,1,'')
SET @Sql = ';WITH T AS(SELECT S_ID, Status, Date FROM Attendance)SELECT * FROM T PIVOT(MAX(Status) FOR Date IN(' + @Dates + ')) As StatusSt'
EXEC(@Sql)
既然您说这是用于考勤报告,我假设您打算在其他工具中格式化和显示数据,例如Excel、SSRS,甚至是网页 您有几个问题需要解决:
但在SSRS或Excel中很容易做到。(这在ASP.NET中也不难,尽管你需要编写代码来完成。)因此我建议你在任何环境下进行数据透视,你要在其中进行格式化等等。你能展示一下你迄今为止所做的工作,以及查询未能提供你想要的内容的地方吗?