sql - T SQL查询格式构建动态表
问题描述
我需要帮助来创建查询以生成我正在寻找的结果。
我正在创建一个应用程序来根据现有数据库表跟踪员工出勤率。用户从日历中选择一个日期或一组日期(例如10/1/18
,10/2/18
和10/3/18
)。他们单击提交,我需要生成一个表格,如果他们当天在场,则在日期列中显示每个员工并带有复选标记。
该表名为 History,有 2 个主要列:EmployeeID;和交易日期。每次员工走过一扇门(包括入口)时,都会创建一个历史交易(NFC 徽章),该交易会添加一个带有员工 ID 和日期/时间戳的新行。每个员工每天可能有几次滑动,但我真正需要知道的是那天是否有一次滑动。我正在发布表格的外观以及查询结果和我的表格需要看起来的图片......
我可以做如下查询:
select employeeid, TranDate from History
where (CAST(trandate as DATE) = '2018-10-1' or CAST(trandate as DATE) = '2018-10-2' or CAST(trandate as DATE) = '2018-10-3' )
order by employeeid, TranDate
并以编程方式对其进行排序,但我觉得有一种更有效的方式来查询我正在寻找的结果。
任何帮助是极大的赞赏。如果我需要给出更好的解释,请告诉我。
解决方案
你想要做的叫做pivot
尝试使用此代码
SELECT employeeid
,case when [2018-10-1] > 0 then '1' else '' end as [2018-10-1]
,case when [2018-10-2] > 0 then '1' else '' end as [2018-10-2]
,case when [2018-10-3] > 0 then '1' else '' end as [2018-10-3]
FROM(
SELECT employeeid
, TranDate
, 1 as num
FROM History
WHERE (CAST(trandate as DATE) = '2018-10-1'
or CAST(trandate as DATE) = '2018-10-2'
or CAST(trandate as DATE) = '2018-10-3' )
)
PIVOT(
COUNT(num)
FOR TranDate IN ([2018-10-1],[2018-10-2],[2018-10-3])
) as pvt
您可以在PIVOT、UNPIVOT SQL上查看 PIVOT 和 UNPIVOT 上的 sql 文档,此外,如果您想要为您的转换字段提供更多动态,您可以查看Dynamic Pivot
推荐阅读
- java - 在 nosql 环境中对用户信息建模的正确方法是什么
- c# - 数组为空时,Mongodb C#驱动程序更新所有子数组元素失败
- php - 在后端的订单详细信息页面中的产品名称旁边显示 woocommerce 产品描述并使其可搜索
- google-drive-api - 如何使用 console.cloud.google 将数据存储到 Google Drive
- jquery - 在没有 flexbox 或 text-align justify 的情况下在两端水平对齐内容/导航
- java - @OneToOne/@ManyToOne/@ManyToMany 的非拥有实体端
- flatbuffers - Flatbuffers Verifier 在没有任何断言的情况下返回 false(定义了 FLATBUFFERS_DEBUG_VERIFICATION_FAILURE)
- php - 如何显示 smarty 变量的所有信息?
- javascript - 如何通过自定义控制器添加副作用以在 Strapi 中创建新记录?
- python - 使用 python (scipy) 提高 Sylvester 方程的求解精度