如何在SQL Server 2014中将结果从一个字段拆分为两个单独的字段

用户名

我正在尝试生成一个报告,该报告可以为我提供每小时,每个车道,每个方向的流量。

到目前为止,我得到的结果是:

|TransDate    |Hour  |Lane| Direction| Count|
---------------------------------------------
|2017-09-05   |1:00  |  1 |     NB   |  18  |
---------------------------------------------
|2017-09-05   |1:00  |  1 |     SB   |  12  |
---------------------------------------------
|2017-09-05   |1:00  |  2 |     NB   |  42  |
---------------------------------------------
|2017-09-05   |1:00  |  2 |     SB   |  31  |
---------------------------------------------
|2017-09-05   |1:00  |  3 |     NB   |   7  |
---------------------------------------------
|2017-09-05   |1:00  |  3 |     SB   |   8  |
---------------------------------------------

我想要得到的结果:

|TransDate    |Hour  |Lane|  NB  |  SB |
----------------------------------------
|2017-09-05   |1:00  |  1 |    18|  12 |
----------------------------------------
|2017-09-05   |1:00  |  2 |    42|  31 |
----------------------------------------
|2017-09-05   |1:00  |  3 |     7|   8 |
----------------------------------------

到目前为止,我的方法是将UNION分为两组代码。一组用于NB方向,另一组用于SB方向。

到目前为止,我的代码:

SELECT  CAST(TransDT as DATE) as 'TransDate' 
       ,CAST(DATEPART(Hour, TransDT) as varchar) + ':00' as 'Hour' 
       ,LaneID
       ,Direction
       ,COUNT(*) as 'NB_Count'

FROM Traffic_analysis

WHERE cast(TransDT as date) = DATEADD (DAY, -1 , cast(SYSDATETIME() as date))
  AND Direction = 'NB'

GROUP BY CAST(TransDT as DATE), DATEPART(Hour, TransDT), LaneID, Direction
ORDER BY CAST(TransDT as DATE), DATEPART(Hour, TransDT), LaneID, Direction

这显然不是正确的方法,因为它不起作用。

我的方法应该是什么,以便像第二张表中那样对每个方向进行计数?

坎南·坎达萨米

您可以按以下方式使用数据透视:

Select * from 
( Select transdate, [hour], lane, direction, [count] from #transdata ) a
pivot (max([count]) for Direction in ([NB],[SB])) p

输出如下:

+------------+------------------+------+----+----+
| transdate  |       hour       | lane | NB | SB |
+------------+------------------+------+----+----+
| 2017-09-05 | 01:00:00.0000000 |    1 | 18 | 12 |
| 2017-09-05 | 01:00:00.0000000 |    2 | 42 | 31 |
| 2017-09-05 | 01:00:00.0000000 |    3 |  7 |  8 |
+------------+------------------+------+----+----+

如果您具有动态的“方向”列表,则可以如下使用动态查询:

Declare @cols1 varchar(max)
Declare @query nvarchar(max)

Select @cols1 = stuff((select Distinct ','+QuoteName(Direction) from #transdata  for xml path('')),1,1,'')

Select @query = '   Select * from 
    ( Select transdate, [hour], lane, direction, [count] from #transdata ) a
    pivot (max([count]) for Direction in (' + @cols1 + ')) p '

Exec sp_executeSql @query

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将一个字段中的日期与另一个字段中的时间结合在一起-MS SQL Server

在SQL Server中将两个表中的公共字段与XML一起使用

如何在SQL Server列的两个字符串之间选择一个字符串?

如何将两个选项集关联到Dynamics CRM 365中的一个字段?

如何在SQL查询的一个字段中求和多个字段?

如何在SQL Server 2014中将两个表中的两个日期时间累积为VIEW?

如何根据条件将一个字段分为两个单独的字段

SQL Server:查询以在一个字段中获得多个结果

如何将两个字段(不同)查询到一个字段中

如何将数据从一个字段复制到SQL Server中不同行中的另一个字段

如何将多行连接到SQL Server中的一个字段

如何将一个表中的两个字段关联到另一个表中的一个字段

SQL Server-从同一视图表中的其他字段创建值一个字段

如何在SQL Server中的两个Weekday名称字段之间获取Weekday名称

如何确定一个字段在SQL Server 2008 R2中是否具有前导零?

Microsoft SQL Server:触发以检查由另一个字段分组的一个字段的总和是否不超过特定值?

如何在SQL SERVER中合并两个表?

如何在SQL Server的两个varchar字符串之间找到一个字符串?

如何在 SQL Server 中添加上一个字段和下一个?

Sql server Pivot并从一个字段创建多个记录并拆分另一个字段

如何获取SQL Server 2014中至少一个字段有数字的记录?

mysql - 如何在一个字段中替换两个子字符串并将结果插入到另一个字段中

如何在django中将一个表单字段拆分为模型的多个字段?

如何在 TypeScript 中将一个字符串拆分为两个变量?

即使sql中的一个字段为空,如何显示两列字段的总和结果?

如何根据两个不同的字段获取一个字段的值

如何按键将一个字典列表拆分为两个字典列表

如何在不同的 ip 中插入来自另一个 SQL Server 的数据字段表 SQL Server?

如何在 Python 中将列表中的一个字符串元素拆分为两个?