Sql 如何将Select查询结果插入数据透视

Sql 如何将Select查询结果插入数据透视,sql,sql-server,sql-server-2012,pivot,Sql,Sql Server,Sql Server 2012,Pivot,我正在使用SQL SERVER 2012 查询:1 SELECT * FROM ( SELECT Insurance, ChargeValue, CreatedDate FROM dailychargesummary WHERE MonthName='June 2017' ) m PIVOT ( SUM(ChargeValue) FOR CreatedDate IN ([06/22/2017], [06/23/2017],[06/30/2017]) ) n

我正在使用SQL SERVER 2012

查询:1

SELECT *
FROM (
    SELECT Insurance, ChargeValue, CreatedDate
    FROM dailychargesummary
    WHERE MonthName='June 2017'
) m
PIVOT (
    SUM(ChargeValue)
    FOR CreatedDate IN ([06/22/2017], [06/23/2017],[06/30/2017])
) n
上述查询的输出如下所示:

现在,我正在Pivot查询中硬编码一个月的所有日期,例如2017年6月1日、2017年6月2日等,在Google中搜索后,我得到以下查询,以显示给定月号的所有日期

问题2:

DECLARE @month AS INT = 5
DECLARE @Year AS INT = 2016

;WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1))M(N)),
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a)
SELECT datefromparts(@year,@month,N) date FROM tally
WHERE N <= day(EOMONTH(datefromparts(@year,@month,1)))
输出如下所示:


任何人都可以指导我如何在Query1中的透视图中使用Query2来自动化日期。

您需要使用动态查询来动态获取透视图列表

首先将日期列表分配给变量

Declare @pivot_list varchar(8000)= ''
DECLARE @month AS INT = 5
DECLARE @Year AS INT = 2016

;WITH N(N)     AS (SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1))M(N)),
      tally(N) AS (SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a)
select @pivot_list = stuff((SELECT ','+quotename(convert(varchar(15),datefromparts(@year,@month,N),101)) 
                            FROM tally
                            WHERE N <= day(EOMONTH(datefromparts(@year,@month,1))) for xml path('')),1,1,'')


--Print @pivot_list

你真的希望每天都有一个专栏。。。或者仅仅是数据中的天数?Google:SQL Server dynamic pivot。@scsimon对于给定月份的每一天,因为我想知道数据丢失的天数。OK,那么您不需要动态pivot,尽管它功能强大。备用物品
Declare @sql varchar(8000)
set @sql = '
SELECT *
FROM (
    SELECT Insurance, ChargeValue, CreatedDate
    FROM dailychargesummary
    WHERE MonthName='June 2017'
) m
PIVOT (
    SUM(ChargeValue)
    FOR CreatedDate IN ('+@pivot_list+')
) n'

--Print @sql

Exec @sql