2015-07-31 1 views
-1

Я пытаюсь загрузить некоторые данные за последние 2 года, и данные в значительной степени статичные и это то, что я имею в виду:как программно загружать данные в таблицу с помощью SQL

Date   UserName Hours 
1/1/2014  Mike01  10 
1/2/2014  Mike01  10 
1/3/2014  Mike01  10 
1/4/2014  Mike01  10 
. 
. 
7/30/2015  Mike01  10 

так UserName и часы всегда одинаковы, и я также хотел бы исключить выходные. Я провел так много часов, но не мог понять, поэтому, пожалуйста, помогите. спасибо

+0

Так что данные уже находятся в таблице, и вы пытаетесь передать его другому? – amza

+1

Что вы пробовали? – Duston

+0

Вы хотите вставить данные из файла в базу данных или вставить их из одной таблицы в другую? –

ответ

1

Попробуйте что-нибудь вроде этого.

Поскольку максимальная рекурсия здесь может быть 731, я использовал Recursive CTE для создания дат. Существуют и другие варианты создания таких дат, как таблица таблиц.

WITH cte 
    AS (SELECT Cast(Cast(Year(getdate())-1 AS CHAR(4)) + '-01-01' AS DATE) AS dates 
     UNION ALL 
     SELECT Dateadd(dd, 1, dates) 
     FROM cte 
     WHERE dates < dateadd(dd,-1,CONVERT(DATE, Dateadd(dd, -(Day(Getdate()) - 1),Getdate()))) 
     ) 
SELECT dates, 
     username, 
     hours 
FROM cte 
     CROSS JOIN (SELECT 'Mike01' AS username, 
          10  AS hours) A 
Where datename(weekday,dates) not in ('saturday','sunday') 
option (maxrecursion 0) 

SQLFIDDLE DEMO

Примечание: В демо я начал даты в прошлом месяце первый день

1

Это должен работать

IF OBJECT_ID('UsersTable') IS NULL 
    CREATE TABLE UsersTable ([Date] DATE, UserName VARCHAR(250), [Hours] TINYINT) 
GO 

DECLARE @Startdt DATETIME = '2013-07-31' 
DECLARE @UsersTable TABLE ([Date] DATE, UserName VARCHAR(250), [Hours] TINYINT) 

WHILE @Startdt <= GETDATE() 
BEGIN 
    IF DATENAME(weekday, @Startdt) NOT IN ('saturday','sunday') 
    BEGIN 
     INSERT INTO @UsersTable 
     SELECT @Startdt 
      ,'Mike01' 
      ,10 
    END 

    SET @Startdt = DATEADD(dd, 1, @Startdt) 
END 

INSERT INTO UsersTable 
SELECT * 
FROM @UsersTable vt 
WHERE NOT EXISTS (
     SELECT 1 
     FROM UsersTable ut 
     WHERE ut.[Date] = vt.[Date] 
     ) 

SELECT * 
FROM UsersTable 

DROP TABLE UsersTable 
Смежные вопросы