【发布时间】:2015-04-03 21:20:00
【问题描述】:
我有一个表,其中包含数据库中不同元素的数据。这是数据库中所有元素的计数(每天都会恢复,因此不可能触发 DDL/DML)
表格如下:
LogDate SYSTEM_TABLE VIEW SQL_TABLE_VALUED_FUNCTION DEFAULT_CONSTRAINT SQL_STORED_PROCEDURE RULE FOREIGN_KEY_CONSTRAINT SERVICE_QUEUE SQL_INLINE_TABLE_VALUED_FUNCTION CHECK_CONSTRAINT USER_TABLE PRIMARY_KEY_CONSTRAINT INTERNAL_TABLE TYPE_TABLE SQL_TRIGGER SQL_SCALAR_FUNCTION UNIQUE_CONSTRAINT
20150204 45 253 60 1401 5259 2 784 3 4 95 2141 1604 26 4 16 195 33
20150203 45 253 60 1401 5259 2 784 3 4 95 2141 1604 16 4 16 195 33
20150202 45 253 60 1401 5259 2 784 3 4 95 2141 1604 21 4 16 195 33
20150201 45 253 60 1401 5259 2 784 3 4 95 2141 1604 25 4 16 195 33
20150131 45 253 60 1401 5259 2 784 3 4 95 2141 1604 21 4 16 195 33
我想做的是将最近的日志日期(20150204)与之前的日志日期(20150203)进行比较,看看元素之间是否有任何变化。然后,这将向相关开发人员发送一封电子邮件,供他们调查(但此部分目前并不重要,现在仅突出显示日志日期之间的更改)
预计到达时间:
它是使用临时表等的更大查询的一部分:
IF OBJECT_ID('tempdb..#DBTotsTEMP') is not null drop table #DBTotsTEMP
--declare variables
DECLARE @DynamicPivotQuery as NVARCHAR(MAX)
DECLARE @ColumnName as NVARCHAR(MAX)
SELECT RIGHT(date, 4) + RIGHT(LEFT(date, 5), 2) + LEFT(date, 2) AS LogDate, [count] as CNT, type_desc
INTO [#DBTotsTEMP]
FROM BI_STG.SSRS.MH_DB_Totals
ORDER BY LogDate DESC
SELECT @ColumnName= ISNULL(@ColumnName + ',', '') + QUOTENAME([type_desc])
FROM (
SELECT DISTINCT [type_desc] FROM #DBTotsTEMP) as TypeDescs
SET @DynamicPivotQuery =
N'SELECT LogDate, ' + @ColumnName + '
INTO #MH_DB_Totals
FROM #DBTotsTEMP
PIVOT (SUM([CNT])
FOR [type_desc] in (' + @ColumnName + ')) as PVTTable
ORDER BY LogDate desc
select * from #MH_DB_Totals'
EXEC sp_executesql @DynamicPivotQuery
我不知道 CTE 部分应该放在哪里,或者如何突出显示数字中的变化!
【问题讨论】:
-
您是否已经尝试过?有什么问题?
标签: sql sql-server-2008 common-table-expression