具有多列日期的 SQL Server 数据透视表
Posted
技术标签:
【中文标题】具有多列日期的 SQL Server 数据透视表【英文标题】:SQL Server Pivot Table with multiple column with dates 【发布时间】:2015-07-08 18:32:38 【问题描述】:我有一个 PIVOT 情况。
源表列:
Title Description Datetime RecordsCount
A California 2015-07-08 10:44:39.040 5
A California 2015-07-08 12:44:39.040 6
A California 2015-05-08 15:44:39.040 3
B Florida 2015-07-08 16:44:39.040 2
B Florida 2015-05-08 19:44:39.040 4
现在我需要将其作为
2015-07-08 2015-05-08
Title Description
A California 11 3
B Florida 2 4
如果我们在同一日期(无论时间)有两个记录计数,则将它们相加,否则显示在不同的列中。
试图写这样的东西,但它会抛出错误。
Select * from #DataQualTest
PIVOT (SUM(RecordCount) FOR DateTime IN (Select Datetime from #DataQualTest) )
AS Pivot_Table
请帮帮我。
谢谢
【问题讨论】:
欢迎使用 ***:如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击“代码示例”按钮 (
) 在编辑器工具栏上以很好地格式化和语法突出显示它!
【参考方案1】:
不完全是逐字逐句的解决方案,但这应该会给你一个方向。
create table #tmp
(
country varchar(max)
, date1 datetime
, record int
)
insert into #tmp values ('California', '2010-01-01', 2)
insert into #tmp values ('California', '2010-01-01', 5)
insert into #tmp values ('California', '2012-01-01', 1)
insert into #tmp values ('Florida', '2010-01-01', 3)
insert into #tmp values ('Florida', '2010-01-01', 5)
select * from #tmp
pivot (sum(record) for date1 in ([2010-01-01], [2012-01-01])) as avg
输出
country 2010-01-01 2012-01-01
California 7 1
Florida 8 NULL
【讨论】:
您好感谢您的回复,问题在于时间戳,当我向数据添加时间戳时,它会返回空值以表示记录计数,否则它工作正常。在单个日期期间有几个计数是问题所在。我们可以添加时间戳吗?【参考方案2】:如果你想更灵活,你需要一些预处理来从完整的时间戳到天(为了以后PIVOT
的分组实际上有预期的效果):
CREATE VIEW DataQualTestView AS
SELECT
title
, description
, DATEFROMPARTS (DATEPART(yyyy, date_time),
DATEPART(mm, date_time),
DATEPART(dd, date_time)) AS day_from_date_time
, recordsCount
FROM DataQualTest
;
从那里你可以继续:
DECLARE @query AS NVARCHAR(MAX)
DECLARE @columns AS NVARCHAR(MAX)
SELECT @columns = ISNULL(@columns + ',' , '')
+ QUOTENAME(day_from_date_time)
FROM (SELECT DISTINCT
day_from_date_time
FROM DataQualTestView) AS TheDays
SET @query =
N'SELECT
title
, description
, ' + @columns + '
FROM DataQualTestView
PIVOT(SUM(recordsCount)
FOR day_from_date_time IN (' + @columns + ')) AS Pivoted'
EXEC SP_EXECUTESQL @query
GO
... 会得到:
| title | description | 2015-05-08 | 2015-07-08 |
|-------|-------------|------------|------------|
| A | California | 3 | 11 |
| B | Florida | 4 | 2 |
查看实际操作:SQL Fiddle。
如果需要调整/进一步详细信息,请发表评论。
【讨论】:
以上是关于具有多列日期的 SQL Server 数据透视表的主要内容,如果未能解决你的问题,请参考以下文章