SQL 行列转换配置(月度电量分析)
本文由 猛 于 2021-12-22 16:05 发布在 SQL
DECLARE @kssj DATETIME
DECLARE @jssj DATETIME
SET @kssj='2021-01-01'
SET @jssj='2021-01-20'
IF OBJECT_ID('tempdb.dbo.#temp_RQ') IS NOT NULL DROP TABLE #temp_RQ
CREATE TABLE #temp_RQ (RQ DATETIME)
DECLARE @drrq DATETIME
SET @drrq=@kssj
WHILE @drrq<=@jssj
BEGIN
INSERT INTO #temp_RQ
SELECT @drrq
SET @drrq=@drrq+1
END
IF OBJECT_ID('tempdb.dbo.#temp_ymxxx') IS NOT NULL DROP TABLE #temp_ymxxx
CREATE TABLE #temp_ymxxx (区域 VARCHAR(50),计量表名 VARCHAR(50),电量 DECIMAL(18,2),日期 DATETIME)
INSERT INTO #temp_ymxxx
SELECT 区域='一',计量表名='照明',电量='1.4',日期='2021-01-01 00:00:00'
UNION
SELECT 区域='一',计量表名='照明',电量='3.5',日期='2021-01-02 00:00:00'
UNION
SELECT 区域='二',计量表名='动力',电量='1.4',日期='2021-01-11 00:00:00'
UNION
SELECT 区域='一',计量表名='照明',电量='7',日期='2021-01-04 00:00:00'
UNION
SELECT 区域='二',计量表名='动力',电量='8',日期='2021-01-15 00:00:00'
declare @sql varchar(max)
set @sql=' select 区域 ,计量表名,总电量=sum(电量) '
select @sql=@sql+',['+CONVERT(VARCHAR(10),RQ,120)+']=isnull(max(case wheN 日期='''+CONVERT(VARCHAR(10),RQ,120)+''' then convert(varchar(50), 电量) else '''' end),'''') '
from #temp_RQ order by RQ
set @sql=@sql+' from #temp_ymxxx
group by 区域 ,计量表名 '
print @sql
exec (@sql)