Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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 (mssql)如何在提取的数据中添加额外的列_Sql Server_Database_Ssms_Sql Server 2017_Sql Server 2017 Express - Fatal编程技术网

Sql server (mssql)如何在提取的数据中添加额外的列

Sql server (mssql)如何在提取的数据中添加额外的列,sql-server,database,ssms,sql-server-2017,sql-server-2017-express,Sql Server,Database,Ssms,Sql Server 2017,Sql Server 2017 Express,我在sql server 2017上运行以下代码: WITH selection AS ( SELECT servertimestamp FROM eventlog WHERE servertimestamp BETWEEN '5/29/2018' AND DATEADD(dd, +1, '6/29/2019') AND (attributes LIKE '%N<=>PeopleIn%')) (SELECT DATEADD(HOUR, DATED

我在sql server 2017上运行以下代码:

WITH selection AS (
    SELECT servertimestamp 
    FROM eventlog 
    WHERE servertimestamp BETWEEN '5/29/2018' AND DATEADD(dd, +1, '6/29/2019')

    AND (attributes LIKE '%N<=>PeopleIn%'))
(SELECT DATEADD(HOUR, DATEDIFF(HOUR, 0, servertimestamp) - (DATEDIFF(HOUR, 0, servertimestamp) % 2), 0) as timestamp , COUNT(servertimestamp) AS GONE_OUT
FROM selection
WHERE DATEPART(hh, servertimestamp) BETWEEN 8 AND 20

GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0, servertimestamp) - (DATEDIFF(HOUR, 0, servertimestamp) % 2), 0))
ORDER BY timestamp
下面的屏幕截图还显示了执行代码的结果:

该代码所做的是显示每天有多少人进入一座大楼。数据以2小时为单位分组

我想做的是,添加一个列,显示在我已经使用的同一时段有多少人离开了大楼。 下面我给大家举一个我想做的例子:

请注意,在第6行中,我使用了LIKE操作符属性,如“%NPeopleIn%”。这意味着对于附加列,我必须进行类似的选择,但不同之处在于使用了“%NPeopleOut%”之类的属性

我能用UNION运算符吗?还有其他更明显或更简单的方法吗

谢谢你的帮助,
谢谢。

UNION按执行顺序追加结果集。 工会不是我解决这个问题的第一选择

我在你的截图中看到的是,出去和进来都是在一个日期时间上分组的,这个日期时间是唯一的,并且是一个类别,聚合值是在这个类别上分组的。 您可能有两个子查询,一个用于外出,一个用于进来,然后建立关系

SELECT *
FROM GONE_OUT AS go 
LEFT JOIN CAME_IN AS ci ON go.timestamp = ci.timestamp

您可以根据活动在CTE中标记servertimestamp字段,然后汇总标签

WITH selection
AS (
  SELECT 
    servertimestamp
    ,CASE WHEN attributes LIKE '%N<=>PeopleIn%' THEN 1 ELSE 0 END AS PPL_IN
    ,CASE WHEN attributes LIKE '%N<=>PeopleOut%' THEN 1 ELSE 0 END AS PPL_OUT
  FROM eventlog
  WHERE 
    servertimestamp BETWEEN '5/29/2018' AND DATEADD(dd, + 1, '6/29/2019')
    AND 
    (attributes LIKE '%N<=>PeopleIn%'
     OR
     attributes LIKE '%N<=>PeopleOut%')
  ) 
  (
    SELECT 
      DATEADD(HOUR, DATEDIFF(HOUR, 0, servertimestamp) - (DATEDIFF(HOUR, 0, servertimestamp) % 2), 0) AS TIMESTAMP
      ,SUM(PPL_OUT) AS GONE_OUT
      ,SUM(PPL_IN) AS CAME_IN
    FROM selection
    WHERE DATEPART(hh, servertimestamp) BETWEEN 8
        AND 20
    GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0, servertimestamp) - (DATEDIFF(HOUR, 0, servertimestamp) % 2), 0)
   )
ORDER BY TIMESTAMP

我想,你可以用一个接头,也可以用一个支点,把整件事做得稍微干净一点。不过,我需要花一个小时左右的时间研究并写出逻辑。