2012-06-05 4 views
0

У меня есть представление, созданное ссылкой на два синонима. Текущий запрос Я собрать мой взгляд таблицу, как показано нижеINSERT INTO Dynamicically

SELECT dbo.synonym1.JobNo 
     , dbo.synonym1.Customer 
     , dbo.synonym2.PostalService 
     , dbo.synonym2.FirstDate 
     , dbo.synonym2.SecondDate 
FROM dbo.synonym1 
    INNER JOIN dbo.synonym2 ON dbo.synonym1.JobNo = sbo.synonym2.JobNo 
WHERE dbo.synonym2.PostalService = 'UPS' 

Теперь я хотел бы узнать разницу между dbo.synonym2.FirstDate и dbo.synonym2.SecondDate в каждой строке и INSERT той же строки снова в таблице View столько раз, сколько есть разница.

Например, если FirstDate - 2012-06-03 00:00:00.000 и SecondDate - 2012-06-05 00:00:00.000, то он должен вставить одну и ту же строку дважды.

Я использую SQL Server 2008 R2, и я новичок в SQL. Пожалуйста, помогите мне

Пример данных, который получает заполняется в настоящее время с указанным запросом в представлении, как показано ниже,

JobNo Customer PostalService FirstDate     SecondDate 
1  ABC  UPS   2012-06-03 00:00:00.000 2012-06-03 00:00:00.000 
2  DEF  UPS   2012-06-03 00:00:00.000 2012-06-06 00:00:00.000 
3  XYZ  UPS   2012-06-03 00:00:00.000 2012-06-05 00:00:00.000 

я должен был бы результат, как показано ниже

JobNo Customer PostalService FirstDate     SecondDate 
1  ABC  UPS   2012-06-03 00:00:00.000 2012-06-03 00:00:00.000 
2  DEF  UPS   2012-06-03 00:00:00.000 2012-06-05 00:00:00.000 
2  DEF  UPS   2012-06-03 00:00:00.000 2012-06-05 00:00:00.000 
2  XYZ  UPS   2012-06-03 00:00:00.000 2012-06-05 00:00:00.000 
3  XYZ  UPS   2012-06-03 00:00:00.000 2012-06-06 00:00:00.000 
3  XYZ  UPS   2012-06-03 00:00:00.000 2012-06-06 00:00:00.000 

Если вы видите разница между датами JobNo 2 равна 3, поэтому данные повторяются три раза. а для JobNo 3 - 2, поэтому данные повторяются дважды.

+2

Вы не вставляете в представление, и я не уверен, что такое «Таблица просмотра». Можете ли вы показать некоторые данные образца и желаемые результаты, вместо того, чтобы говорить, как вы хотите их выполнить? Я уверен, что есть лучший способ, чем то, что вы описываете. Если вы выполняете запрос (основное использование для представления), не должно быть необходимости вставлять что-либо. –

+0

Прошу прощения за то, что я не смог четко объяснить это. Я обновил вопрос с образцами данных по вашему запросу. Также, когда я упомянул View Table, это просто означает View. – user1345260

ответ

1

Вашего запроса немного сбивают с толком, потому что один обычно не вставить взгляды.

Однако, следующие будут вставлять строки в таблицу

insert into ViewTable(JobNo, Customer, PostalService, FirstDate, SecondDate) 
    SELECT dbo.synonym1.JobNo, dbo.synonym1.Customer, dbo.synonym2.PostalService, 
      dbo.synonym2.FirstDate, dbo.synonym2.SecondDate 
    FROM dbo.synonym1 INNER JOIN 
      dbo.synonym2 
      ON dbo.synonym1.JobNo = sbo.synonym2.JobNo 
    WHERE dbo.synonym2.PostalService = 'UPS' and 
      datediff(d, FirstDate, SecondDate) <> 0 

Вам нужно определить ViewTable как фактический таблицы, хотя.

+0

Прошу прощения за то, что вы сбиваете с толку. Я новичок в этом. Когда я попробовал ваш запрос, он просто дает мне данные с разницей дат. – user1345260

+0

Вы пытаетесь вставить новую запись для каждой даты в диапазоне? Если это так, вы должны обновить свой вопрос, чтобы это стало ясно. –

0

звучит так, как вы хотите, это заявление союза, чтобы заполнить эту таблицу темп. , если я не понимаю, о чем вы просите.

DECLARE @MyTable as TABLE(JobNo VARHCAR(50), Customer VARCHAR(50), 
         Postalservice VARCHAR(50), MyDate DateTime) 

INSERT into @MyTable 
SELECT dbo.synonym1.JobNo 
    , dbo.synonym1.Customer 
    , dbo.synonym2.PostalService 
    , dbo.synonym2.FirstDate 

FROM dbo.synonym1 
INNER JOIN dbo.synonym2 ON dbo.synonym1.JobNo = sbo.synonym2.JobNo 
WHERE dbo.synonym2.PostalService = 'UPS' 
UNION 
SELECT dbo.synonym1.JobNo 
    , dbo.synonym1.Customer 
    , dbo.synonym2.PostalService 

    , dbo.synonym2.SecondDate 
FROM dbo.synonym1 
INNER JOIN dbo.synonym2 ON dbo.synonym1.JobNo = sbo.synonym2.JobNo 
WHERE dbo.synonym2.PostalService = 'UPS'  

вставленная в вид из @MyTable

+0

Вы уверены, что хотите описать это как «INSERT to your view»? –

+0

Прошу прощения. Я не ищу СОЮЗ. Я обновил свой вопрос. Пожалуйста, взгляните еще раз. Спасибо – user1345260

0
Create Table #temp 
(
    StartDate DateTime, 
    EndDate DateTime 
) 

Insert into #temp(StartDate, EndDate) 
        Values('2012-06-03 00:00:00.000', '2012-06-03 00:00:00.000'); 
Insert into #temp(StartDate, EndDate) 
        Values('2012-06-03 00:00:00.000', '2012-06-06 00:00:00.000'); 
Insert into #temp(StartDate, EndDate) 
        Values('2012-06-03 00:00:00.000', '2012-06-05 00:00:00.000'); 

With DateRange As 
(
    select Convert(DateTime, '2012-06-02 00:00:00.000') as StartDate, 
      DATEADD(dd, 1, Convert(DateTime, '2012-06-02 00:00:00.000')) as EndDate 
    Union All 
    select EndDate, DATEADD(dd, 1, EndDate) From DateRange 
        Where EndDate <= Convert(DateTime, '2012-06-10 00:00:00.000') 
) 

Select T.* from #temp T 
Left Join DateRange R on ((T.StartDate < R.EndDate and T.EndDate > R.StartDate) 
      or (T.StartDate = R.EndDate and T.EndDate = R.StartDate)) 
order by T.EndDate 

Drop table #temp 
+0

Я не буду всегда не знать диапазон дат. Поэтому я не уверен, что это можно использовать. Спасибо за помощь. – user1345260

+0

@ user1345260 Это значение может быть рассчитано следующим образом. 'Выберите Min (StartDate) From YourTable' –

+0

@ user1345260 и' Select Max (StartDate) From YourTable' –