交叉表查询

时间:2010-01-23 13:50:37

标签: sql sql-server-2005 crosstab

我有一张员工出勤的表 - 让我们说 - OATT。以下是结构和样本数据

AttDate EmpId EmpName AttCode InTime OutTime
01-10-2009 1 Jain, Rahul P 0900 1830
02-10-2009 1 Jain, Rahul P 0900 1830
03-10-2009 1 Jain, Rahul P 0900 1830
04-10-2009 1 Jain, Rahul P 0900 1830
05-10-2009 1 Jain, Rahul P 0900 1830
06-10-2009 1 Jain, Rahul WO 0900 1830
07-10-2009 1 Jain, Rahul WO 0900 1830
08-10-2009 1 Jain, Rahul P 0900 1830
09-10-2009 1 Jain, Rahul L 0900 1830
10-10-2009 1 Jain, Rahul P 0900 1830
01-10-2009 1 Jain, Rahul A 0900 1830

我需要以下结果:

EmpId 01-10 02-10 03-10 04-10 05-10
1 P P P P P
2 P P P L P
3 P P P P A

我知道这可以使用数据透视查询来完成,但我需要一个动态查询来执行指定的日期范围。我正在使用SQL Server 2005。

3 个答案:

答案 0 :(得分:1)

PIVOT关键字可能有所帮助,但即使这样,您仍需要在运行查询之前知道列的内容。这通常意味着运行两个查询:一个用于获取列名称列表,然后是第二个用于实际获取结果的查询。

答案 1 :(得分:1)

使用动态sql查看 similar question/answer

答案 2 :(得分:-1)

其中一个解决方案是make Query将TSQL代码打印成变量 然后调用exec @variable