我搜索了这个论坛和其他论坛,仍然找不到一个有效的解决方案。我在MS SQL中有一个Employees表和一个EmpCalendar表。表格数据如下所示,当然是为本论坛简化的;
雇员表
User_id|员工
1|Crystal Dee
4|Darryl Haster
EmpCalendar表
Calid|user_id|Date_Assigned|Position|StartTime-EndTime
-|
1|1|2202-11-29|LPN|上午7:00-下午2:30
2|4|2202-11-29|RN|
3|1|2202-11-30|LPN|
4|4|2202-11-30|主播|上午7:00-下午3:30
正如您可以看到的,每天有多个人工作,所以每天都有许多条目,我在SQL中所做的基本输出(对于给定的日期范围)将类似于上面的EmpCalendar表,其中包含Employees表中的员工姓名(涉及内部联接和SQL,因为我也不想向任何人显示当天的休息时间,等等)。我们的调度程序需要一次大约一周的概览来查看有哪些空位,因此日期应该以列的形式进行,而不是像EmpCalendar表中那样以行的形式输出。所需输出将如下所示:
职位|员工|2202-11-29|2202-11-30
-|-|
LPN|Crystal Dee|上午7:00-下午2:30|上午7:00-下午2:30
RN|Darryl Haster||上午7:00-下午3:30
LPN|Crystal Dee|上午7:00-下午2:30|
RN|Darryl Haster|上午7:00-下午3:30|上午7:00-下午3:30
我在我的SQL语句中尝试了透视查询,但遇到了错误,并多次尝试查找与我类似的问题,然后更改我的特定表的答案,但我的问题涉及日期,而不仅仅是nvarchar条目(大多数示例都涉及nvarchar条目),但它们是SQL中的日期条目。我以前从来没有在SQL中做过透视,直到最近才了解到它们存在于研究为什么我不能根据需要获得作为列的日期的输出,并且通常操作我的Coldfusion代码中的数据。以下是我当前的SQL查询示例,用于获取从CF表单到此页面的特定日期范围的日历条目列表:
SELECT EmpCalendar.position, EmpCalendar.Days_date
, EmpCalendar.Shift, EmpCalendar.UnitWorking, EmpCalendar.StartTime
, EmpCalendar.EndTime, EmpCalendar.HoursWorked, pCalendar.CountOfHours
, EmpCalendar.user_id, EmpCalendar.Comments, Employees.fullname
, Employees.FirstName, Employees.LastInit
FROM EmpCalendar INNER JOIN Employees ON EmpCalendar.user_id = Employees.user_id
where (LEN(EmpCalendar.Off_type) < 1 or EmpCalendar.Off_type IS NULL)
and EmpCalendar.Days_date >= #Startdate#
and EmpCalendar.Days_date <= #Enddate# and EmpCalendar.Shift = '1'
order by Days_date
1条答案
按热度按时间djmepvbi1#
我认为你所要求的精神与你想要的略有不同,所以如果这个解决方案不适合你的情况,我深表歉意。同样有趣的是,您的标记似乎是针对MySQL的,但您的问题是MS SQL。我假设它是为MS SQL设计的。
我看到你也提到了冷聚变。我假设您已经知道了报表的开始日期和结束日期,并且可以动态循环cfQuery标记以生成将出现在for DATE_ASSIGNED IN(...Cf此处循环...)密码。
只有一些其他的小纸币。我预计开始时间和结束时间应该在单独的时间数据类型d列中。你在2202年的产出中的日期,可能是2022年,只是值得注意的是,当你进一步深入项目时,这会引起你的问题。
相关文档:https://learn.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16
希望这能帮上忙。祝好运!