【发布时间】:2016-01-28 22:06:36
【问题描述】:
我想对列中的所有唯一条目执行此查询。 (创建一个基本的数据透视摘要)(有 160 个唯一值)
SELECT CAST(Log_Local_Stamp as date) AS ForDate,
DATEPART(hour,Log_Local_Stamp) AS OnHour,
DATEPART(minute,Log_Local_Stamp) AS OnMinute,
DATEPART(second,Log_Local_Stamp) AS OnSecond,
COUNT(*) AS Totals
FROM MainView
GROUP BY CAST(Log_Local_Stamp as date),
DATEPART(hour,Log_Local_Stamp),
DATEPART(minute,Log_Local_Stamp),
DATEPART(second,Log_Local_Stamp) ORDER BY ForDate
现在有两种方法可以做到这一点:静态枢轴和动态枢轴。我使用了一些代码来生成静态数据透视调用,但是两个调用都失败了。
SELECT *
from
(
SELECT
CAST(Log_Local_Stamp as date) AS ForDate,
DATEPART(hour,Log_Local_Stamp) AS OnHour,
DATEPART(minute,Log_Local_Stamp) AS OnMinute,
DATEPART(second,Log_Local_Stamp) AS OnSecond,
COUNT(*) AS Totals
FROM MainView
WHERE DATEPART(hour,Log_Local_Stamp) BETWEEN 10 and 13 and CAST(Log_Local_Stamp as date) = '2015-12-09'
GROUP BY CAST(Log_Local_Stamp as date),
DATEPART(hour,Log_Local_Stamp),
DATEPART(minute,Log_Local_Stamp),
DATEPART(second,Log_Local_Stamp) ) as ps
Pivot
(
sum(Totals) FOR MainView.Log_Machine_Name IN (Properly formatted list here)
) as piv
这里收到的错误是“列前缀'MainView'与查询中使用的表名或别名不匹配。”,在倒数第二行。不知道为什么会这样。
我的第二种方法是使用动态轴
DECLARE @cols as NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ','
+ QUOTENAME(Ltrim(rtrim(Log_Machine_Name)))
from MainView
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query =
'SELECT CAST(Log_Local_Stamp as date) AS ForDate,
DATEPART(hour,Log_Local_Stamp) AS OnHour,
DATEPART(minute,Log_Local_Stamp) AS OnMinute,
DATEPART(second,Log_Local_Stamp) AS OnSecond,
COUNT(*) AS Totals ' + @cols + '
FROM (MainView
GROUP BY CAST(Log_Local_Stamp as date),
DATEPART(hour,Log_Local_Stamp),
DATEPART(minute,Log_Local_Stamp),
DATEPART(second,Log_Local_Stamp) ORDER BY ForDate ) x
pivot
(
SUM(COUNT(*)) for Log_Machine_Name in (' + @cols + ')
) p '
execute(@query)
但是,它在第 5 行的“来自 Log_Machine_Name 的数据”附近出现错误语法。 不太清楚如何解决这种情况。
谢谢
【问题讨论】:
-
请标记或提及 RDMS。这看起来像 SQL Server。 SQL 是一种具有多种方言的共享语言。
标签: sql sql-server-2008 pivot