在SQL表中创建事件总数表
我正在尝试从格式透视表在SQL表中创建事件总数表,sql,Sql,我正在尝试从格式透视表 | ID | access date | -------------- | 1 | 08.10| | 1 | 08.10| | 4 | 08.10| | 2 | 02.09| 到 我尝试过使用PIVOT函数,但是因为我有很多不同的日期,所以我不想键入查询 SELECT * FROM ( SELECT [Sequence of events] as ID ,[Submission Date] as access_date FROM
| ID | access date |
--------------
| 1 | 08.10|
| 1 | 08.10|
| 4 | 08.10|
| 2 | 02.09|
到
我尝试过使用PIVOT函数,但是因为我有很多不同的日期,所以我不想键入查询
SELECT *
FROM (
SELECT [Sequence of events] as ID
,[Submission Date] as access_date
FROM [database_name].[dbo].[Event Logging]
) AS SOURCE_TABLE
PIVOT( SUM(ID) for access_date IN ("08.01", "09.01", "10.01"....)
) as pvt_table
我对SQL非常陌生,因此我希望能够深入了解如何解决这个问题 这样试试,您需要动态sql,注意脚本没有经过测试,而且在命名列时,尽量不要使用空格、大小写或下划线来分隔单词 最后一件事,这是针对
SQL Server
,因为您没有标记任何东西,而且您的代码看起来像SQL Server
declare @cols nvarchar(max)
select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME([Submission Date])
from [database_name].[dbo].[Event Logging]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
declare @sql nvarchar(max);
set @sql = '
SELECT *
FROM (
SELECT [Sequence of events] as ID
,[Submission Date] as access_date
FROM [database_name].[dbo].[Event Logging]
) AS SOURCE_TABLE
PIVOT( SUM(ID) for access_date IN (' + @cols + ')
) as pvt_table';
-- print (@sql)
execute (@sql)
这不是用你们的方式解决问题的答案,而是用另一种方式解决问题 我要做的是创建两个表。第一个将被称为
DATE\u DB
,我将在其中存储DATEID
和DATE
,它将如下所示:
| DATEID | DATE |
| 1 | 01.01|
| 2 | 02.02|
....
| ID | DATEID | VALUE |
| 1 | 2 | 10 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 2 | 5 |
| DATE | VALUE |
| 02.01 | 10 |
| 02.01 | 3 |
| 02.01 | 5 |
| 03.01 | 4 |
然后在第二个表中,我存储如下数据:
| DATEID | DATE |
| 1 | 01.01|
| 2 | 02.02|
....
| ID | DATEID | VALUE |
| 1 | 2 | 10 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 2 | 5 |
| DATE | VALUE |
| 02.01 | 10 |
| 02.01 | 3 |
| 02.01 | 5 |
| 03.01 | 4 |
因此,在第二个表中,列ID仅用于主键,与此无关,但与这样的表和JOIN
命令类似,您可以这样使用它:
| DATEID | DATE |
| 1 | 01.01|
| 2 | 02.02|
....
| ID | DATEID | VALUE |
| 1 | 2 | 10 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 2 | 5 |
| DATE | VALUE |
| 02.01 | 10 |
| 02.01 | 3 |
| 02.01 | 5 |
| 03.01 | 4 |
选择日期\u DB.DATE,SECONDTABLE.VALUE
从第二张桌子
SECONDTABLE.DATEID=DATE\u DB.DATE上的左连接日期\u DB
按日期订购数据库日期
将显示如下结果:
| DATEID | DATE |
| 1 | 01.01|
| 2 | 02.02|
....
| ID | DATEID | VALUE |
| 1 | 2 | 10 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 2 | 5 |
| DATE | VALUE |
| 02.01 | 10 |
| 02.01 | 3 |
| 02.01 | 5 |
| 03.01 | 4 |
您使用的是哪种数据库管理系统?