Pivot In Werte mit Daten?

stimmen
0

Am Ende meiner sql, ich bin mit dem folgenden Code ein. Gibt es eine Möglichkeit die feststehenden Strings [2011.07.14] zu ersetzen, [2011.07.16], usw., zu GetDate () Wert?

PIVOT 
    (
       count([AppointmentsBooked])
       FOR [date] IN ([2011/07/14], [2011/07/16], [2011/07/17],[2011/07/18],[2011/07/21])
    ) as pivottable
Veröffentlicht am 14/07/2011 um 11:59
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
0

Diese Frage wurde vor einem Jahr geschrieben zu. i do not care. Ich habe einig Code, der genau sein könnte, was die OP wollte .... Ich bin sicher, dass er nie wieder kommt und wählte eine Antwort, aber immer noch .... alles, was ich tun möchte, ist die Datensätze nach Monat mit einem Dreh zählen für ein paar Tische und schließlich vergleicht die Anzahl der Datensätze für jeden Monat für jede Tabelle. aber ... in diesem Code gibt es nur eine Tabelle (rt_taco_15m), aber das spielt keine Rolle. Ich habe einfach nicht den Rest geschrieben vollständig meine Bedürfnisse passen. aber ich denke, es ist auf die Bedürfnisse des OP passt oder zumindest bekommt ihn auf einen guten Start .... wenn er wirklich ein Jahr lang auf dieses Problem gewartet hat. lol.

if object_id('tempdb..#temp') is not null drop table #temp
if object_id('tempdb..#temp2') is not null drop table #temp2
if object_id('tempdb..#temp3') is not null drop table #temp3

declare @start_date as datetime
    set @start_date = cast('1-1-2012' as datetime)
declare @end_date as datetime
    set @end_date = cast('9-1-2012' as datetime)


;with cte as    (
    select  @start_date as [start], 
            dateadd(month, 1, @start_date) as [end]

    union   all

    select  dateadd(month, 1, [start]) as [start], 
            dateadd(month, 1, dateadd(month, 1, [start])) as [end]
    from    cte
    where   dateadd(month, 1, [start]) <= @end_date
)


(select 'rt_taco_15m' as table_name, 
        convert(varchar(10), [start], 101) as [start],  
        convert(varchar(10), [end], 101) as [end],
        datename(month, [start]) as month_name, 
        cast([start] as integer) as orderby,
        count(taco.taco_record_id) as [range_count] 

into    #temp 

from    cte

        left outer join rt_taco_15m as taco
            on taco.period >= cte.[start] and 
                taco.period < cte.[end]  

group   by cte.[start], cte.[end])


select  table_name as table_name, 
        convert(varchar(10), getdate(), 101)  as [start], 
        convert(varchar(10), getdate(), 101) as [end],
        'Total' as month_name, 
        cast(dateadd(month,2,@end_date) as integer) as orderby,
        range_sum as [range_count]

into    #temp2

from    (select table_name, sum([range_count]) as range_sum
            from #temp group by table_name) as summed_up

select  * 
into    #temp3
from    (select * from #temp
         union all
         select * from #temp2) as x
order by orderby


select * from #temp3

declare @cols nvarchar(2000)
select  @cols = stuff(
                    (select '],[' + month_name
                     from    #temp3 
                     order by orderby
                     for xml path('') ) 
                , 1, 2, '') + ']'
print @cols


if object_id('tempdb..#temp2') is not null drop table #temp2
declare @query varchar(max)
set @query = N'
                select  table_name, ' + @cols + N'

                from    (select table_name, month_name, range_count
                            from #temp3) p 

                        pivot ( sum(range_count) for month_name in ( '+ @cols +' ) ) as pvt'

execute(@query
Beantwortet am 12/07/2012 um 21:11
quelle vom benutzer

stimmen
0

Sie können eine Zeichenfolge aller Termine erstellen, die mit ‚[‘ und ‚]‘ getrennt wird Komma vor und nach jedem Zeitpunkt. zuweisen diese Zeichenfolge an einer Zeichenfolgenvariable (@dates) und die Zeichenfolge Spieß Methode verwenden alle Daten innerhalb des Schwenk query aufzuspalten.

Beantwortet am 28/07/2011 um 11:59
quelle vom benutzer

stimmen
0

Können Sie versuchen , zu verwenden BETWEENund DATEADDin folgenden Weise:

DECLARE @dates TABLE(value DateTime)

INSERT IGNORE  INTO @dates VALUES
(GETDATE()),
('2011/07/9'),
('2011/07/17'), 
('2011/07/18'), 
('2011/07/21')

SELECT value FROM @dates
WHERE value BETWEEN GETDATE() AND DATEADD(day, 5, GETDATE())
Beantwortet am 14/07/2011 um 12:16
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more