【问题标题】:Payroll breakdown by quarter sql query按季度 sql 查询的工资明细
【发布时间】:2019-03-22 13:57:36
【问题描述】:

我有一张像这样的桌子

    EmployeeID | Name | Check Date | Check Num | Check Amount | Quarter
    1          | Test | 01/21/2018 | 001231312 | 500          | 1
    1          | Test | 03/01/2018 | 001233210 | 100          | 1
    1          | Test | 05/01/2018 | 123213321 | 13           | 2
    1          | Test | 08/01/2018 | 321909900 | 321          | 3
    1          | Test | 12/01/2018 | 321000132 | 123          |4

我需要显示以下输出

EmployeeID | Name | 1st Quarter Date | 1st Quarter Check Num | 1st Quarter Check Amount | 2nd Quarter Date | 2nd Quarter Check Num | 2nd Quarter Check Amount | 3rd Quarter Date | 3rd Quarter Check Num | 3rd Quarter Check Amount | 4th Quarter Date | 4th Quarter Check Num | 4th Quarter Check Amount

我对此进行了研究,发现了有关使用 Pivot 的信息,但不清楚何时显示详细信息而不是某些列的聚合。

谢谢

【问题讨论】:

  • 您能提供一些样本数据并期待结果吗?
  • 您是如何决定1st Quarter Date 2nd Quarter Date 列的?
  • 更重要的是,您希望按季度看到的检查数量是多少?
  • 您的预期结果是什么?
  • 您的样本数据中有两个第一季度检查。您想同时查看结果还是只查看一个?

标签: sql sql-server tsql pivot


【解决方案1】:

在我看来,最简单的方法是将 Datepart(QUARTER, Check Date) 与 case 语句结合使用。

例子:

Select EmployeeID
   , Name
   , CASE WHEN Datepart(QUARTER, CheckDate) = 1 Then 'Check Date' END AS '1st Quarter Date'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 1 Then 'Check Num' END AS '1st Quarter Check Num'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 1 Then 'Check Amount' END AS '1st Quarter Check Amount'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 2 Then 'Check Date' END AS '2nd Quarter Date'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 2 Then 'Check Num' END AS '2nd Quarter Check Num'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 2 Then 'Check Amount' END AS '2nd Quarter Check Amount' 
   , CASE WHEN Datepart(QUARTER, CheckDate) = 3 Then 'Check Date' END AS '3rd Quarter Date'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 3 Then 'Check Num' END AS '3rd Quarter Check Num'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 3 Then 'Check Amount' END AS '3rd Quarter Check Amount' 
   , CASE WHEN Datepart(QUARTER, CheckDate) = 4 Then 'Check Date' END AS '4th Quarter Date'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 4 Then 'Check Num' END AS '4th Quarter Check Num'
   , CASE WHEN Datepart(QUARTER, CheckDate) = 4 Then 'Check Amount' END AS '4th Quarter Check Amount' 
From YourTableName

我相信有更简洁的方法可以做到这一点,我相信其他人也会加入进来。 另外,请注意我没有在 Datepart 中使用相同的列名,我相信您将需要 '' 由于空格(Datepart(QUARTER, 'Check Date')。

编辑:OP 添加了一些示例数据,由于有一个“季度”列,我们可以将 Case 语句更改为:

CASE WHEN QUARTER = 1 Then ....
CASE WHEN QUARTER = 2 Then ....
CASE WHEN QUARTER = 3 Then ....
CASE WHEN QUARTER = 4 Then ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多