多个计数和合并列

时间:2018-11-20 16:35:37

标签: sql sql-server tsql

我当前有一个查询,可以查询两个日期之间每小时的零件数量:

DECLARE @StartDate datetime 
DECLARE @EndDate datetime 

SET @StartDate = '10/10/2018' 
SET @EndDate = '11/11/2018' 

SELECT 
    CONVERT(VARCHAR(10), CAST(presstimes AS DATE), 111) AS ForDate, 
    DATEPART(HOUR, presstimes) AS OnHour, 
    COUNT(*) AS Totals   
FROM
    partmasterlist 
WHERE 
    ((presstimes >= @StartDate AND presstimes < dateAdd(d, 1, @EndDate))  
    AND (((presstimes IS NOT NULL)))) 
GROUP BY
    CONVERT(VARCHAR(10), CAST(presstimes AS DATE), 111), 
    DATEPART(HOUR, presstimes) 
ORDER BY 
    CONVERT(VARCHAR(10), CAST(presstimes AS DATE), 111) ASC;

输出:

Date        Hour QTY
---------------------
2018/11/06  11   16
2018/11/06  12   20
2018/11/06  13   29
2018/11/06  14   26

现在,我需要添加另一个数量列来计算设置“修剪时间”的位置。

我不知道如何完全加入日期和小时列(例如,小时2的印刷时间可能为20数量,但小时2的修整时间为NULL);

输入:

ID    presstimes                         trimmingtimes
-----------------------------------------------------------------
1     2018-10-10 01:15:23.000            2018-10-10 01:15:23.000
2     2018-10-10 01:15:23.000            NULL
3     2018-10-10 02:15:23.000            NULL
4     NULL                               2018-10-10 03:15:23.000

输出:

Date      hour    Press QTY   T QTY
------------------------------------
10/10/18  1           2         1
10/10/18  2           1         0
10/10/18  3           0         1

1 个答案:

答案 0 :(得分:1)

我怀疑您想要这样的东西:

select convert(date, v.dt) as date,
       datepart(hour, v.dt) as hour,
       sum(ispress) as num_press,
       sum(istrim) as num_trim
from partmasterlist pml cross apply
     (values (pml.presstime, 1, 0), (pml.trimmingtime, 0, 1)
     ) v(dt, ispress, istrim)
group by convert(date, v.dt), datepart(hour, v.dt)
order by convert(date, v.dt), datepart(hour, v.dt);

您可以为特定范围添加where子句。