在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     |

您使用的是哪种数据库管理系统?