2014-02-07 18 views
0

我在這裏有一些在子句中插入多個日期的問題。在「IN」子句中有多個日期的樞軸

這是我通過互聯網研究所看到的代碼。

;with cte (datelist, maxdate) as 
    (
     select min(arrivaldate) datelist, max(departuredate) maxdate 
     from BookingsPerPerson 
     union all 
     select dateadd(dd, 1, datelist), maxdate 
     from cte 
     where datelist < maxdate 
    ) 
    select c.datelist 
    into #tempDates 
    from cte c 

    select * 
    from 
    (
     select b.person_id, b.arrivaldate, b.departuredate, 
      d.datelist, 
      convert(CHAR(10), datelist, 120) PivotDate 
     from #tempDates d 
     left join BookingsPerPerson b 
      on d.datelist between b.arrivaldate and b.departuredate 
    ) x 
    pivot 
    (
     count(datelist) 
     for PivotDate in ([2012-01-01], [2012-01-02], [2012-01-03], 
          [2012-01-04], [2012-01-05], [2012-01-06] , [2012-01-07]) 
    ) p; 

由於代碼被手動添加IN子句

pivot 
    (
     count(datelist) 
     for PivotDate in ([2012-01-01], [2012-01-02], [2012-01-03], 
          [2012-01-04], [2012-01-05], [2012-01-06] , [2012-01-07]) 
    ) p; 

內的日期是否可以只使用這是提取的日期/由此代碼

;with cte (datelist, maxdate) as 
     (
      select min(arrivaldate) datelist, max(departuredate) maxdate 
      from BookingsPerPerson 
      union all 
      select dateadd(dd, 1, datelist), maxdate 
      from cte 
      where datelist < maxdate 
     ) 
     select c.datelist 
     into #tempDates 
     from cte c 
分裂

並在「IN」子句中使用SELECT語句樞軸聲明?
是否這樣?

pivot 
     (
      count(datelist) 
      for PivotDate in (select c.datelist from #tempDates) 
     ) p; 

我試過這個,但它給我一個錯誤?
有沒有什麼辦法可以將 中的多個日期添加到臨時表中,並將其包含在IN條款中?

你可以在這裏試試吧:http://sqlfiddle.com/#!3/8857c/9

回答

0

是有一種方法。首先放置級聯日期在一個可變..

例如:

DECLARE @dateArray AS VARCHAR(500)
SELECT @dateArray = '02/01/2014,02/02/2014, 02/03/2014,02/04/2014'

然後創建一個動態SQL查詢:

組@query = 'SELECT * FROM TABLE PIVOT(計數(datelist)PivotDate在(' + @ dateArray +'))

希望它能幫助你。 :)