PIVOT運算符用於在列和行之間對數據進行旋轉或透視轉換,同時執行聚合運算
官方的語法如下:
PIVOT(
聚合函數(value_column)
FOR pivot_column
IN(<column_list>)
)
我這邊有一個保存網站下所有子域名PV的表PV_Test,數據如下
現在要查詢每個域名下不同日期的PV
SQL代碼如下
DECLARE --保存最終執行的SQL語句 @strSql nvarchar(1000), --定義變量保存要轉化為列的數據 @Date nvarchar(500) --賦值 很重要,不賦值執行沒結果 SET @Date='' --賦值 把所有要轉化為列的數據保存在字符串中,並且以逗號分隔 SELECT @Date=@Date+CDate FROM (SELECT DISTINCT '['+CONVERT(varchar(10), CDate, 23)+'],' AS CDate FROM PV_Test) AS T1 --打印@Date PRINT(@Date) --去掉末尾的一個逗號 SET @Date=SUBSTRING(@Date,1,LEN(@Date)-1) --使用PIVOT運算符轉化 SET @strSql= 'SELECT * FROM (SELECT Domain,CONVERT(varchar(10), CDate, 23) AS RQ,PV FROM dbo.PV_Test) AS a PIVOT(SUM(PV) FOR RQ IN ('+@Date+') ) AS b' --打印最終執行的SQL PRINT(@strSql) --執行sql EXEC (@strSql)
備注已經寫得很清楚了,執行結果如下
可以清楚的看到每個域名下各個日期的PV情況