SQL中的数据透视报表假日规范

时间:2014-07-02 10:08:07

标签: c# php mysql sql

我已根据天数(1 .... 31)创建了一个适用于员工出勤的枢轴报告,并根据CheckTime显示当前和缺席(P& A)状态。我还想在枢轴报告中定义假日或星期五,并创建一个名为“假日”的表。现在我该怎么做或任何想法实际需要做什么?我尝试加入表并创建结果但失败了。对于枢轴报告,除了节假日之外,一切都将为我完成。

    Sample and desired output:

        Name       Dates
        Name - 1 - 2 - 3 - 4
        Mr.Erik - P - A - P - H

    Output obtained by union all:

        Name       Dates
        Name - 1 - 2 - 3 - 4
        Mr.Erik - P - A - P - null
        Mr.Erik - null - null - null - H

    Sample Code:

    SELECT Distinct BadgeNumber, EmployeeFullName, HOLIDAYNAME,
        [1] AS '1',
        [2] AS '2',
        [3] AS '3',
        [4] AS '4',
        [5] AS '5',
        [6] AS '6',
        [7] AS '7',
        [8] AS '8',
        [9] AS '9',
       [10] AS '10',
       [11] AS '11',
       [12] AS '12',
       [13] AS '13',
       [14] AS '14',
       [15] AS '15',
       [16] AS '16',
       [17] AS '17',
       [18] AS '18',
       [19] AS '19',
       [20] AS '20',
       [21] AS '21',
       [22] AS '22',
       [23] AS '23',
       [24] AS '24',
       [25] AS '25',
       [26] AS '26',
       [27] AS '27',
       [28] AS '28',
       [29] AS '29',
       [30] AS '30',
       [31] AS '31'

    FROM
    (Select Distinct Day(CHECKTIME) as DAY,CHECKTIME, HOLIDAYNAME, BadgeNumber, EmployeeFullName from empCheckInOut inner join SMEmployee on SMEmployee.EmployeeID = empCheckInOut.USERID inner join SMHoliday on SMHoliday.HOLIDAYDAY = '6' Where datepart(MM, CHECKTIME) = '06')

    source
    PIVOT
    (
        count(CHECKTIME) 
        FOR DAY
        IN ( [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20],
             [21], [22], [23], [24], [25], [26], [27], [28], [29], [30],[31])
    ) AS PivotDay

union all

    SELECT Distinct BadgeNumber, EmployeeFullName, HOLIDAYNAME,
        [1] AS '1',
        [2] AS '2',
        [3] AS '3',
        [4] AS '4',
        [5] AS '5',
        [6] AS '6',
        [7] AS '7',
        [8] AS '8',
        [9] AS '9',
       [10] AS '10',
       [11] AS '11',
       [12] AS '12',
       [13] AS '13',
       [14] AS '14',
       [15] AS '15',
       [16] AS '16',
       [17] AS '17',
       [18] AS '18',
       [19] AS '19',
       [20] AS '20',
       [21] AS '21',
       [22] AS '22',
       [23] AS '23',
       [24] AS '24',
       [25] AS '25',
       [26] AS '26',
       [27] AS '27',
       [28] AS '28',
       [29] AS '29',
       [30] AS '30',
       [31] AS '31'

    FROM
    (Select Distinct Day(STARTTIME) as DAY,STARTTIME, HOLIDAYNAME, BadgeNumber, EmployeeFullName from empCheckInOut inner join SMEmployee on SMEmployee.EmployeeID = empCheckInOut.USERID inner join SMHoliday on SMHoliday.HOLIDAYDAY = '6' Where datepart(MM, CHECKTIME) = '06')

    source
    PIVOT
    (
        min(STARTTIME) 
        FOR DAY
        IN ( [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20],
             [21], [22], [23], [24], [25], [26], [27], [28], [29], [30],[31])
    ) AS PivotDay

0 个答案:

没有答案