【问题标题】:PIVOT with Multiple Dates inside "IN" clause“IN”子句中包含多个日期的 PIVOT
【发布时间】:2014-03-04 07:31:34
【问题描述】:

我在 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

【问题讨论】:

    标签: mysql sql pivot in-clause


    【解决方案1】:

    是的,有办法。您首先将连接的日期放在一个变量中..

    例如:

    将@dateArray 声明为 VARCHAR(500)
    SELECT @dateArray = '02/01/2014,02/02/2014,02/03/2014,02/04/2014'

    然后创建一个动态 sql 查询:

    set @query = 'SELECT * FROM TABLE PIVOT (count(datelist) PivotDate in (' + @dateArray + '))

    希望它对您有所帮助。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多