【问题标题】:Get Sum of two columns having multiple pivot获取具有多个枢轴的两列的总和
【发布时间】:2018-08-08 12:35:34
【问题描述】:

我创建了一个 SQL 查询,它返回一个人在一个月中的总天数,现在我想添加总列和 3 种类型的休假列,即 [Casual Leave]、[Paid Leave]、[免费休假]。

简而言之,我想将 [Casual Leave]、[Paid Leave] 和 [Complimentary Leave] 添加到总列。

我的查询如下:

;WITH ToPivot
AS ( SELECT 
            time_tracker.date, 
            Users.FirstName + ' ' + Users.LastName AS username, 
            (CASE 
                WHEN 
                    (
                        (datepart(hour, chk_in)) is null 
                        OR (datepart(hour, chk_out)) is null
                    ) 
                    then 
                    0 
                WHEN 
                    (
                        (datepart(hour, chk_in)) >= 12 
                        OR (datepart(hour, chk_out)) < 16 
                        AND ((datepart(hour, chk_out)) - (datepart(hour, chk_in))) < 6
                    ) 
                    THEN 
                    0.5  
                ELSE 
                1 
            END) AS late, TypeOfLeaves.leave_type, Userleavetyp.no_of_days 
            FROM Users 
            INNER JOIN time_tracker ON Users.ID = time_tracker.fk_userid 
            INNER JOIN Userleavetyp ON Users.ID = Userleavetyp.fk_user 
            INNER JOIN TypeOfLeaves ON Userleavetyp.fk_tol = TypeOfLeaves.ID 
            WHERE (Users.FK_Status = 1)
), 
LateTotals AS (
    SELECT T.username, Total = SUM(late),T.leave_type,T.no_of_days 
    FROM ToPivot AS T 
    WHERE T.date BETWEEN '2018-07-01' AND '2018-07-31' GROUP BY T.username,T.leave_type,T.no_of_days
)

SELECT distinct(pv2.username) as original ,PV2.*,L.Total 
FROM ToPivot AS P
PIVOT (SUM(late) FOR date IN ("2018-07-01", "2018-07-02", "2018-07-03", "2018-07-04", "2018-07-05", "2018-07-06", "2018-07-07", "2018-07-08", "2018-07-09", "2018-07-10", "2018-07-11", "2018-07-12", "2018-07-13", "2018-07-14", "2018-07-15", "2018-07-16", "2018-07-17", "2018-07-18", "2018-07-19", "2018-07-20", "2018-07-21", "2018-07-22", "2018-07-23", "2018-07-24", "2018-07-25", "2018-07-26", "2018-07-27", "2018-07-28", "2018-07-29", "2018-07-30", "2018-07-31")) AS pv1
PIVOT (SUM(no_of_days) FOR leave_type IN ([Casual Leave], [Paid Leave], [Complimentary Leave])) AS pv2
LEFT JOIN LateTotals AS L ON L.username = pv2.username

这段代码的输出如下:

【问题讨论】:

  • 轻松帮到你,看看stackoverflow.com/help/mcve
  • 至少做一些格式化。此查询是一堵不可读的文本墙。那里有几件事看起来也很可疑。
  • 请忽略之前上传的查询,参考新更新的查询

标签: sql sql-server pivot pivot-table


【解决方案1】:

我相信您只需要按如下方式更改您的选择语句。 从此:

SELECT distinct(pv2.username) as original ,PV2.*,L.Total

到这里:

SELECT distinct(pv2.username) as original ,PV2.*,L.Total,
    CASE WHEN PV2.[Casual Leave] IS NULL THEN 0 ELSE PV2.[Casual Leave] +
    CASE WHEN PV2.[Paid Leave] IS NULL THEN 0 ELSE PV2.[Paid Leave] +
    CASE WHEN PV2.[Complimentary Leave] IS NULL THEN 0 ELSE PV2.[Complimentary Leave]
    AS [Total Leave]

【讨论】:

    猜你喜欢
    • 2012-09-23
    • 2017-08-14
    • 2018-08-28
    • 2020-12-27
    • 1970-01-01
    • 2018-10-31
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多