Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server连接两个表,并保留各自的值和日期_Sql_Sql Server_Join_Sql Server 2012_Sql Date Functions - Fatal编程技术网

SQL Server连接两个表,并保留各自的值和日期

SQL Server连接两个表,并保留各自的值和日期,sql,sql-server,join,sql-server-2012,sql-date-functions,Sql,Sql Server,Join,Sql Server 2012,Sql Date Functions,我有两个查询,得到两组结果: 时间查询: SELECT a.AID AID, CONCAT(CONVERT(date, c.CDate),DATEPART(HOUR, c.CDate)) CDateHour, SUM(c.time/60/1000) duration FROM TableA a INNER JOIN TableB b ON b.bkey = a.akey LEFT JOIN TableC c ON b.subbkey = c.subckey WHERE a.AID = '1000

我有两个查询,得到两组结果:

时间查询:

SELECT a.AID AID, CONCAT(CONVERT(date, c.CDate),DATEPART(HOUR, c.CDate)) CDateHour, SUM(c.time/60/1000) duration
FROM TableA a
INNER JOIN TableB b ON b.bkey = a.akey
LEFT JOIN TableC c ON b.subbkey = c.subckey
WHERE a.AID = '10000'
GROUP BY c.CDate, a.AID
ORDER BY c.CDate;
时间结果:

AID     CDateHour    duration
10000   2018-10-259  91
10000   2018-10-2512 25
10000   2018-10-2513 25
10000   2018-10-2514 14
10000   2018-10-2515 20
计数查询:

SELECT a.AID AID, CONCAT(CONVERT(date, d.DDate),DATEPART(HOUR, d.DDate)) DDateHour, COUNT(DISTINCT e.EID) COUNTEID
FROM TableA a
INNER JOIN TableD d ON d.dto = a.AID
INNER JOIN TableE e ON e.ekey = d.dkey
WHERE a.AID = '10000'
GROUP BY d.DDate, a.AID
ORDER BY d.DDate
计数结果:

AID     DDateHour    COUNTEID
10000   2018-10-256  2
10000   2018-10-257  28
10000   2018-10-258  44
10000   2018-10-259  22
10000   2018-10-2510 49
10000   2018-10-2511 46
10000   2018-10-2512 37
我希望将这两个查询合并,以获得以下输出:

AID     DateHour      duration  COUNTID
10000   2018-10-256             2
10000   2018-10-257             28
10000   2018-10-258             44   
10000   2018-10-259   91        22
10000   2018-10-2510            49
10000   2018-10-2511            46
10000   2018-10-2512  25        37
10000   2018-10-2513  25
10000   2018-10-2514  14
10000   2018-10-2515  20
空格可以为NULL或0。

您似乎想要:

with q1 as (<first query here without order by>),
     q2 as (<second query without order by>)
select coalesce(q1.AID, q2.AID) as AID,
       coalesce(q1.DDateHour, q2.DDateHour) as DDateHour,
       q1.duration, q2.counteid
from q1 full join
     q2
     on q1.AID = q2.AID and
        q1.DDateHour = q2.DDateHour;
你似乎想要:

with q1 as (<first query here without order by>),
     q2 as (<second query without order by>)
select coalesce(q1.AID, q2.AID) as AID,
       coalesce(q1.DDateHour, q2.DDateHour) as DDateHour,
       q1.duration, q2.counteid
from q1 full join
     q2
     on q1.AID = q2.AID and
        q1.DDateHour = q2.DDateHour;

那些日期怎么样?月份只有28-31天,而不是256天以上。根据查询和别名,它们是DateHours。以这种方式将月日与日时进行编码会导致灾难。您如何区分第11天和第1小时->111与第1天和第11小时->111?@PeterB很好的观点,我这样做的:CONCATCONVERTdate,d.DDate',DATEPARTHOUR,d.DDate这些日期是什么?月份只有28-31天,而不是256天以上。根据查询和别名,它们是DateHours。以这种方式将月日与日时进行编码会导致灾难。您如何区分第11天和第1小时->111与第1天和第11小时->111?@PeterB好的一点,我这样做的:CONCATCONVERTdate,d.DDate',DATEPARTHOUR,d.DDate