2015-03-18 1 views
1

Я использую SQL Server 2008 и иметь базу данных, которая включает в себя день недели в типа долота, такие как:Импорт DayOfWeek Имя в бите в SQL

JobID   int 
JobDescription nvarchar(50) 
M    bit 
Tu    bit 
W    bit 
Th    bit 
F    bit 
Sa    bit 
Su    bit 

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

100 Backup  Monday 
101 Reports  Monday 
102 Cleaning Tuesday 

так мне нужно это, чтобы показать, например

100 Backup  1 0 0 0 0 0 0 
101 Reports  1 0 0 0 0 0 0 
102 Cleaning 0 1 0 0 0 0 0 

У меня есть несколько тысяч строк этого и, похоже, не думаю о способе импорта этих данных. Есть предположения?

ответ

0

Первый файл импорта как в временную таблицу, а затем вставить в таблицу назначения из:

DECLARE @t TABLE(JobID INT, JobDescription NVARCHAR(MAX), DayOfTheWeek NVARCHAR(MAX)) 

INSERT INTO @t VALUES 
(100, 'Backup', 'Monday'), 
(101, 'Reports', 'Monday'), 
(102, 'Cleaning', 'Tuesday') 


SELECT JobID, 
     JobDescription, 
     CASE WHEN DayOfTheWeek = 'Monday' THEN 1 ELSE 0 END AS M, 
     CASE WHEN DayOfTheWeek = 'Tuesday' THEN 1 ELSE 0 END AS Tu, 
     CASE WHEN DayOfTheWeek = 'Wednsday' THEN 1 ELSE 0 END AS W, 
     CASE WHEN DayOfTheWeek = 'Thusday' THEN 1 ELSE 0 END AS Th, 
     CASE WHEN DayOfTheWeek = 'Friday' THEN 1 ELSE 0 END AS F, 
     CASE WHEN DayOfTheWeek = 'Saturday' THEN 1 ELSE 0 END AS Sa, 
     CASE WHEN DayOfTheWeek = 'Sunday' THEN 1 ELSE 0 END AS Su 
FROM @t 

Выход:

JobID JobDescription M Tu W Th F Sa Su 
100  Backup   1 0 0 0 0 0 0 
101  Reports   1 0 0 0 0 0 0 
102  Cleaning  0 1 0 0 0 0 0 
+0

Точно, что я искал, спасибо! – aantiix

0

У меня есть два этапа решения вашей проблемы. Во-первых, вы можете создать 7 столбцов, представляющих биты для каждого дня недели, используя Excel. Следующие снимки экрана показывают, как вы можете сделать это:

enter image description here


enter image description here

В каждом столбце в определенный день недели, я использую формулу для проверки 0 или 1 должен идти там.

Следующим шагом является экспорт файла в формате CSV из Excel с использованием запятых в качестве разделителя. После этого вы можете импортировать этот файл в SQL Server.

BULK INSERT YourTable 
FROM 'YourCSV.csv' 
WITH 
(
    FIRSTROW = 2, 
    FIELDTERMINATOR = ',', --CSV field delimiter 
    ROWTERMINATOR = '\n', --Use to shift the control to next row 
    TABLOCK 
) 

И результат будет таким же, как с помощью метода Джорджей:

JobID JobDescription M Tu W Th F Sa Su 
100  Backup   1 0 0 0 0 0 0 
101  Reports   1 0 0 0 0 0 0 
102  Cleaning  0 1 0 0 0 0 0 

метода я использую позволяет вам оставаться в комфорте Excel для обработки грязной части промывки данных. Только на последнем этапе мы приносим данные в SQL Server.

0

Obviusly Вам нужно: во-первых, прочитать файл excel. Битовый массив для недели идет от 0 до 6, поэтому для каждой прочитанной строки у вас есть правильный массив для значений. Каждая строка из excel будет представлять собой инструкцию sql в значениях (...) (код, задача, 0,1,0 ... 0). Сохраните все запросы и выполните в конце.