2016-08-15 3 views
-1

Ich habe eine Tabelle, in der es 4 Spalten gibt, Spalten können in regelmäßigen Abständen hinzugefügt oder gelöscht werden. Ich brauche eine dynamische Abfrage, die die Spalten auf Laufzeitbasis behandelt und eine Berechnung durchführt.Dynamische Spalten Spalte1 Spalte2 Spalte3 Spalte4

Unten sind meine Struktur meiner Tabelle zusammen mit Beispieldatensätzen.

ID, col1,   col2,   col3,    col4 
1 '2016-08-09'  '2016-08-09' '2016-08-09'  '2016-08-09' 
2 '2016-08-10'  '2016-08-10' '2016-08-13'  '2016-08-04' 

ich führen möchte, in dem mein Date Unterschied in jeder Spalte kommen sollte und es sollte eine Gesamt Spalten sollte anfügen, die für bestimmte ID Gesamtzahl dieser Spalten geben. Ergebnismenge sollte wie folgt sein.

ID col1 Col2 Col3 Col4 Total 
1 6  6  6 6  24 
2. 6  7  8 8  29 
+0

Wie Sie bekommen, dass die Ausgabe von den Probendaten zu erwarten ...? – ZLK

+0

Erläutern Sie Ihre Date-Diff-Berechnung. –

+0

Ihr Date Diff für ID sieht wie datediff aus (dd, coln, getdate()), aber ID 2 folgt nicht dem gleichen Muster –

Antwort

1

Getestet, funktioniert gut. :)

--create table structure 
create table #test1 (ID int, col1 date, col2 date, col3 date, col4 date) 
go 

--insert sample data 
insert #test1 
select 1, '2016-08-09',  '2016-08-09', '2016-08-09',  '2016-08-09' 
union all 
select 2, '2016-08-10',  '2016-08-10', '2016-08-13',  '2016-08-04' 
union all 
select 3, '2016-08-10',  '2016-08-10', NULL,  '2016-08-04' 


--below is solution 
with cte_test1 (id, dif1, dif2, dif3, dif4) as 
(
    select id, 
      datediff(day, col1, getdate()) as dif1, 
      datediff(day, col2, getdate()) as dif2, 
      datediff(day, col3, getdate()) as dif3, 
      datediff(day, col4, getdate()) as dif4 
    from #test1 
) 
select id,dif1,dif2,dif3,dif4,ISNULL(dif1,0)+ISNULL(dif2,0)+ISNULL(dif3,0)+ISNULL(dif4,0) as difTotal 
from cte_test1 

ERGEBNIS:

enter image description here

+0

OP war auf der Suche nach dynamic –

+0

Danke für das Aufzeigen. Um ehrlich zu sein, bin ich mir nicht sicher, was die "Spalten löschen und hinzufügen" hier bedeuten. Ich nehme an, dass beim Löschen von Spalten die OP bedeutet, dass sie null ist. –

+0

Sie können sehr gut richtig sein. Mein Verständnis ist Spalten nicht Zeilen. Das heißt, ich habe eine Lösung für ihn, aber er hat nie auf meine Fragen geantwortet. Geht weiter ... Prost –

Verwandte Themen