2017-04-19 5 views
-1

an und danken Ihnen im Voraus. Ich bin weit entfernt von einem SQL-Entwickler, habe aber etwas Erfahrung, und ich habe das Gefühl, dass dies ziemlich einfach sein sollte.Erhalten Sie die verbleibenden Tage und hängen Sie die Anweisung

Ich habe die folgende Abfrage gefunden, die die verbleibenden Tage im Monat zurückgibt. Es wirkt wie ein Zauber. Aber wenn ich versuche, sie an eine einfache select-Anweisung anzuhängen, die Daten aus einer Tabelle holt, kann ich sie nicht als Spalte anhängen. Jede Hilfe würde sehr geschätzt werden.

Declare @DaysLeft as INT 

;With MyCTE AS 
(
    SELECT number + 1 as 'CurrentDay' 
    FROM master..spt_values 
    WHERE type='p' 
    AND number < datepart(dd, DateAdd(day,-1,DateAdd(Month,1,DateAdd(Month, 
      DateDiff(Month, 0, GETDATE()),0)))) 
AND datename(WEEKDAY,DateAdd(Month, DateDiff(Month, 0, GETDATE()), 
            number)) not in ('Saturday','Sunday') 
) 

Select @DaysLeft = (Select COUNT(*) As MyTotal from MyCTE 
WHERE CurrentDay >= DATEPART(DD, GETDATE())) 

Select @DaysLeft as 'Remaining' 

Was ich bin versucht:

Select column 1, column 2 , Remaining (code from above) from TableName 
+3

Nicht ganz sicher, was Sie versuchen, hier zu tun, sondern versuchen, die letzte Zeile zu ersetzen mit 'Wählen Sie Spalte 1, Spalte 2, @DaysLeft als‚Rest‘von TableName'? – aucuparia

Antwort

0

Ich denke, dies ist ein einfacher Weg, um die verbleibenden Tage im Monat zu bekommen:

with remainingDays as (
     select dateadd(day, 1, currdate) as dte 
     from (select cast(getdate() as date) currdate) x 
     where month(dateadd(day, 1, currdate)) = month(getdate()) 
     union all 
     select dateadd(day, 1, dte) as dte 
     from remainingDays 
     where month(dateadd(day, 1, dte)) = month(getdate()) 
    ) 
select * 
from remainingDays; 

Es verwendet einen rekursiven CTE, aber es sollte nicht so viel Overhead für diese Art von Operation sein.

Here es ist in Rex Tester.

+0

Wie können Sie das mit meiner Antwort unten ändern? Ich konnte es nicht zum Laufen bringen – Adam

0

Danke das hat funktioniert. Sehr geschätzt. Hier ist meine letzte Abfrage:

Declare @DaysLeft as INT 
;With MyCTE AS 
(
    SELECT number + 1 as 'CurrentDay' 
FROM master..spt_values 
WHERE type='p' 
AND number < datepart(dd, DateAdd(day,-1,DateAdd(Month,1,DateAdd(Month, 
             DateDiff(Month, 0, GETDATE()),0)))) 
AND datename(WEEKDAY,DateAdd(Month, DateDiff(Month, 0, GETDATE()), 
            number)) not in  ('Saturday','Sunday') 
) 

Select @DaysLeft = (Select COUNT(*) As MyTotal from MyCTE 
WHERE CurrentDay >= DATEPART(DD, GETDATE())) 


SELECT column 1, column 2, @daysLeft 'remaining' 
FROM TableName 
Verwandte Themen