Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL中的稀疏日期与值数据填充详尽的数据历史记录_Sql_Sql Server - Fatal编程技术网

从SQL中的稀疏日期与值数据填充详尽的数据历史记录

从SQL中的稀疏日期与值数据填充详尽的数据历史记录,sql,sql-server,Sql,Sql Server,我有一张有以下信息的桌子 ID, USER, DATE, AMOUNT id1, user2, 01/02/2015, 100 id2, user1, 03/02/2015, 200 id3, user2, 06/02/2015, 400 id4, user3, 04/02/2015, 900 我想得到的是一个表,列出[min_date,max_date]间隔中的所有日期以及每个用户的相应值 USER, user1, user2, user3 01/02/2015, 0, 100, 0 0

我有一张有以下信息的桌子

ID, USER, DATE, AMOUNT
id1, user2, 01/02/2015, 100
id2, user1, 03/02/2015, 200
id3, user2, 06/02/2015, 400
id4, user3,  04/02/2015, 900
我想得到的是一个表,列出[min_date,max_date]间隔中的所有日期以及每个用户的相应值

USER, user1, user2, user3
01/02/2015,  0, 100, 0
02/02/2015, 0, 0, 0
03/02/2015, 300, 0, 0
04/02/2015, 0, 0, 900
05/02/2015, 0, 0, 0
06/02/2015, 0, 400, 0
我正在使用中建议的技术生成一列日期

WITH Dates AS (
        SELECT
         [Date] = CONVERT(DATE,'01/01/2011', 103)
        UNION ALL SELECT
         [Date] = DATEADD(DAY, 1, [Date])
        FROM
         Dates
        WHERE
         Date < CONVERT(date, '30/11/2016', 103)
) SELECT
 [Date]
FROM
 Dates
 OPTION (MAXRECURSION 10000)
 --OPTION (MAXRECURSION 45)
试试这个:

CREATE TABLE IDS (ID CHAR(100), USERS CHAR(100), DATES  CHAR(100), AMOUNT  INT)
INSERT INTO IDS VALUES ('id1', 'user2', '01/02/2015', 100)
INSERT INTO IDS VALUES ('id2', 'user1', '03/02/2015', 200)
INSERT INTO IDS VALUES ('id3', 'user2', '06/02/2015', 400)
INSERT INTO IDS VALUES ('id4', 'user3', '04/02/2015', 900)


WITH Dates AS (
        SELECT
         [Date] = CONVERT(DATE,'02/01/2015', 103)
        UNION ALL SELECT
         [Date] = DATEADD(MONTH, 1, [Date])
        FROM
         Dates
        WHERE
         Date < CONVERT(date, '30/12/2015', 103)
)

SELECT [Date] AS [USER] INTO [DATE] FROM Dates OPTION (MAXRECURSION 1200)



select [DATE].[USER],COALESCE ([user1],0) AS 'user1',COALESCE ([user2],0) AS 'user2',COALESCE ([user3],0) AS 'user3'
from 
(
  select DATES, USERS, AMOUNT
  from IDS
) src
pivot
(
  sum(AMOUNT)
  for USERS in ([user1], [user2], [user3])
) piv
RIGHT JOIN [DATE] ON [DATE].[USER]=PIV.DATES