Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 交叉表查询_Sql_Sql Server 2005_Crosstab - Fatal编程技术网

Sql 交叉表查询

Sql 交叉表查询,sql,sql-server-2005,crosstab,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, Rahu

我有一张员工出勤的桌子——比如说——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 AttDate EmpId EmpName AttCode开始超时 01-10-2009拉胡尔贾恩1号邮政编码0900 1830 02-10-2009拉胡尔贾因1号,邮编0900 1830 03-10-2009拉胡尔贾恩1号邮政编码0900 1830 04-10-2009拉胡尔贾恩1号邮政编码0900 1830 05-10-2009拉胡尔贾恩1号邮政编码0900 1830 06-10-2009拉胡尔和耆那教1号0900 1830 07-10-2009拉胡尔和耆那教1号0900 1830 08-10-2009拉胡尔贾因1号,邮编0900 1830 09-10-2009拉胡尔贾因1号,邮编:0900 1830 10-10-2009拉胡尔贾恩1号邮政编码0900 1830 01-10-2009拉胡尔贾恩1号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 EmpId 01-10 02-10 03-10 04-10 05-10 1便士 2P L P 3便士
我知道这可以使用pivot查询来完成,但我需要一个动态查询来在指定的日期范围内完成。我正在使用SQL Server 2005。

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

解决方案之一是使用查询将TSQL代码打印到变量中
然后调用exec@variable

列就是日期。所以,如果日期范围是09年10月1日到09年10月30日,那么每个日期应该有一列。是的,我明白了。但是Sql Server不能自动为您选择起点和终点。你必须在你的查询中列出每一个,而且在日期上特别棘手。