Using Count with Case expression - sql

I'm probably going to torn apart for asking but why do these produce different results when comparing Claims_Completed in the 2 different scenarios? The Claims_Completed values are the same as Claims_Received in both scenarios.
SELECT
DischargeType
,COUNT(CASE WHEN (DateReceived > '2/1/2015' AND DateReceived < DATEADD(dd, 1, '2/28/2015')) THEN 1 ELSE 0 END) AS Claims_Received
,COUNT(CASE WHEN (DateCompleted > '2/1/2015' AND DateCompleted < DATEADD(dd, 1, '2/28/2015')) THEN 1 ELSE 0 END) AS Claims_Completed
FROM Claims GROUP BY DischargeType
Scenario 2:
SELECT COUNT(*) AS Claims_Received
FROM Claims
WHERE DateReceived > '2/1/2015' AND DateReceived < DATEADD(dd, 1, '2/28/2015')
GROUP BY DischargeType
SELECT COUNT(*) AS Claims_Completed
FROM Claims
WHERE DateCompleted > '2/1/2015' AND DateCompleted < DATEADD(dd, 1, '2/28/2015')
GROUP BY DischargeType

You need sum() instead of count():
SELECT DischargeType,
SUM(CASE WHEN (DateReceived > '2/1/2015' AND
DateReceived < DATEADD(dd, 1, '2/28/2015'))
THEN 1 ELSE 0
END) AS Claims_Received,
SUM(CASE WHEN (DateCompleted > '2/1/2015' AND
DateCompleted < DATEADD(dd, 1, '2/28/2015'))
THEN 1 ELSE 0
END) AS Claims_Completed
FROM Claims
GROUP BY DischargeType;
Because count() misinterpret here, as it will count 0 as value or as data.

COUNT will count all non-null values from the sequence. Since 1 and 0 are both non-null it's counting everything. One option is to use NULL instead of 0:
SELECT
DischargeType
,COUNT(CASE WHEN (DateReceived > '2/1/2015'
AND DateReceived < DATEADD(dd, 1, '2/28/2015'))
THEN 1 ELSE NULL END) AS Claims_Received
,COUNT(CASE WHEN (DateCompleted > '2/1/2015'
AND DateCompleted < DATEADD(dd, 1, '2/28/2015'))
THEN 1 ELSE NULL END) AS Claims_Completed
FROM Claims
GROUP BY DischargeType

Related

Get the last 14 days of records not included current date

I'm having trouble with the dates. I have here my code to count the records for the last 14 days from the current date but not including TODAY in the display.
Here's my SQL query
SELECT
a.TrackingCode,
a.SegmentName,
a.Brand,
a.DateAdded,
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 1 THEN 1 ELSE NULL END) as "Day_1",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 2 THEN 1 ELSE NULL END) as "Day_2",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 3 THEN 1 ELSE NULL END) as "Day_3",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 4 THEN 1 ELSE NULL END) as "Day_4",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 5 THEN 1 ELSE NULL END) as "Day_5",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 6 THEN 1 ELSE NULL END) as "Day_6",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 7 THEN 1 ELSE NULL END) as "Day_7",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 8 THEN 1 ELSE NULL END) as "Day_8",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 9 THEN 1 ELSE NULL END) as "Day_9",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 10 THEN 1 ELSE NULL END) as "Day_10",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 11 THEN 1 ELSE NULL END) as "Day_11",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 12 THEN 1 ELSE NULL END) as "Day_12",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 13 THEN 1 ELSE NULL END) as "Day_13",
COUNT(CASE WHEN DATEDIFF(DD, a.DateAdded, GETDATE()) = 14 THEN 1 ELSE NULL END) as "Day_14"
FROM
Journey_Injection_Logger_Base a
WHERE
a.DateAdded >= DATEADD(DD, -14, GETDATE())
AND a.DateAdded <= GETDATE()
GROUP BY
a.TrackingCode, a.SegmentName, a.Brand, a.DateAdded
The Day_1 is the yesterday's date. The problem is that when the next day comes it will add the new current date and my records for the Day_1 is not moving.
Sample output
enter image description here
From the above image of sample output. The record 2 should be in 4/14 TUE

Query optimization for weekly data for the month

Need help in SQL server query optimization which is as follow:
enter declare #sDate datetime
declare #eDate datetime
SET #sDate = '2017-01-01'
SET #eDate = '2017-01-31'
SELECT
#sDate AS [StartDate],
DATEADD(day,6, #sDate) [ENDDATE],
SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen],
SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM GS
WHERE
(GS.[ModifiedDate] > #sDate)
AND
(GS.[ModifiedDate] <= DATEADD(day,6, #sDate))
UNION
SELECT
DATEADD(day,7, #sDate) AS [StartDate],
DATEADD(day,13, #sDate) [ENDDATE],
SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen],
SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM GS
WHERE
(GS.[ModifiedDate] > DATEADD(day,7, #sDate))
AND
(GS.[ModifiedDate] <= DATEADD(day,13, #sDate))
UNION
SELECT
DATEADD(day,14, #sDate) AS [StartDate],
DATEADD(day,20, #sDate) [ENDDATE],
SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen],
SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM GS
WHERE
(GS.[ModifiedDate] > DATEADD(day,7, #sDate))
AND
(GS.[ModifiedDate] <= DATEADD(day,20, #sDate))
UNION
SELECT
DATEADD(day,21, #sDate) AS [StartDate],
DATEADD(day,27, #sDate) [ENDDATE],
SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen],
SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM GS
WHERE
(GS.[ModifiedDate] > DATEADD(day,21, #sDate))
AND
(GS.[ModifiedDate] <= DATEADD(day,27, #sDate))
UNION
SELECT
DATEADD(day,27, #sDate) AS [StartDate],
#eDate [ENDDATE],
SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen],
SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM GS
WHERE
(GS.[ModifiedDate] > DATEADD(day,27, #sDate))
AND
(GS.[ModifiedDate] <= #eDate)
and result should be as follow:
StartDate ENDDATE rcOpen rcClosed
2017-01-01 00:00:00.000 2017-01-07 00:00:00.000 NULL NULL
2017-01-08 00:00:00.000 2017-01-14 00:00:00.000 NULL NULL
2017-01-15 00:00:00.000 2017-01-21 00:00:00.000 12 5
2017-01-22 00:00:00.000 2017-01-28 00:00:00.000 NULL NULL
2017-01-28 00:00:00.000 2017-01-31 00:00:00.000 NULL NULL
May be I need to use CTE (common table expressions)for weekly data as mentioned here
how to get the start and end dates of all weeks between two dates in SQL server?
declare #sDate datetime,
#eDate datetime;
select #sDate = '2013-02-25',
#eDate = '2013-03-25';
;with cte as
(
select #sDate StartDate,
DATEADD(wk, DATEDIFF(wk, 0, #sDate), 6) EndDate
union all
select dateadd(ww, 1, StartDate),
dateadd(ww, 1, EndDate)
from cte
where dateadd(ww, 1, StartDate)<= #eDate
)
select *
from cte
If you can't add a Dates or Numbers table to your database, using a derived table generated by the CTE you mention is probably the best way forward:
declare #sDate datetime,
#eDate datetime;
select #sDate = '2013-02-25',
#eDate = '2013-03-25';
;with cte as
(
select #sDate StartDate,
DATEADD(wk, DATEDIFF(wk, 0, #sDate), 6) EndDate
union all
select dateadd(ww, 1, StartDate),
dateadd(ww, 1, EndDate)
from cte
where dateadd(ww, 1, StartDate)<= #eDate
)
SELECT
CTE.StartDate
,CTE.EndDate
,SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen]
,SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM CTE
LEFT JOIN GS
ON CTE.StartDate < GS.[ModifiedDate]
AND CTE.EndDate >= GS.[ModifiedDate]
GROUP BY CTE.StartDate
,CTE.EndDate
ORDER BY CTE.StartDate
Another way of doing it
declare #sDate datetime
declare #eDate datetime
SET #sDate = '2017-01-01'
SET #eDate = '2017-01-31'
--A recursive CTE for fetching the weeks range
;WITH CTE AS
(
SELECT #sDate SDATE
, DATEADD(DD,6,#sDate) AS TO_DTE
UNION ALL
SELECT DATEADD(DD,1,TO_DTE)
, CASE
WHEN DATEADD(DD, 7, TO_DTE) > #eDate
THEN #eDate
ELSE DATEADD(DD, 7, TO_DTE)
END
FROM CTE
WHERE DATEADD(DD, 1, TO_DTE) <= #eDate
)
/* An Intermediate result of CTE to better understand
+-------------------------+-------------------------+
| SDATE | TO_DTE |
+-------------------------+-------------------------+
| 2017-01-01 00:00:00.000 | 2017-01-07 00:00:00.000 |
| 2017-01-08 00:00:00.000 | 2017-01-14 00:00:00.000 |
| 2017-01-15 00:00:00.000 | 2017-01-21 00:00:00.000 |
| 2017-01-22 00:00:00.000 | 2017-01-28 00:00:00.000 |
| 2017-01-29 00:00:00.000 | 2017-01-31 00:00:00.000 |
+-------------------------+-------------------------+
*/
SELECT CTE.SDATE
,CTE.TO_DTE
,SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen]
,SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM GS
JOIN CTE
ON GS.[ModifiedDate] > CTE.SDATE
AND GS.[ModifiedDate] <= CTE.TO_DTE
GROUP BY CTE.SDATE
,CTE.TO_DTE
ORDER BY CTE.SDATE
This query will perform better than a recursive CTE.
declare #sDate datetime = '2017-01-01';
declare #eDate datetime = '2017-01-31';
WITH X AS (
SELECT DISTINCT
DATEADD(DAY, - (DATEPART(WEEKDAY, [Dates])-1), [Dates]) [WeekStart]
, DATEADD(DAY, 7- (DATEPART(WEEKDAY, [Dates])), [Dates]) [WeekEnd]
FROM (
SELECT DISTINCT DATEADD(DAY , rn -1 , #sDate) [Dates]
FROM (
Select TOP (DATEDIFF(DAY, #sDate, #eDate))
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) rn
FROM master..spt_values a
CROSS JOIN master..spt_values b
)a
) b
)
SELECT [WeekStart]
, [WeekEnd]
, SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen],
, SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM X
LEFT JOIN GS ON GS.[ModifiedDate] <= CTE.[WeekEnd]
AND GS.[ModifiedDate] >= CTE.[WeekStart]
declare #sDate datetime,
#eDate datetime;
select #sDate = '2013-02-25',
#eDate = '2013-03-25';
;with cte as
(
select #sDate StartDate,
DATEADD(dd,(7 - (DATEPART(dw,DATEADD(month,DATEDIFF(mm,0,#SelectedDate),0)) + ##DATEFIRST) % 7) % 7,DATEADD(month,DATEDIFF(mm,0,#sDate),0)) EndDate
union all
select dateadd(dd, 1, EndDate),
dateadd(ww, 1, EndDate)
from cte
where dateadd(ww, 1, StartDate)<= #eDate
)
SELECT
CTE.StartDate
,CTE.EndDate
,SUM(CASE WHEN GS.[Status] = 'Open' THEN 1 ELSE 0 END) [rcOpen]
,SUM(CASE WHEN GS.[Status] = 'Closed' THEN 1 ELSE 0 END) [rcClosed]
FROM CTE
Right JOIN CTE
ON CTE.StartDate < GS.[ModifiedDate]
AND CTE.EndDate >= GS.[ModifiedDate]
GROUP BY CTE.StartDate
,CTE.EndDate
ORDER BY CTE.StartDate
After making few changes in #iamdave answer above will be the correct answer
Maybe you can use UNION ALL instead of just UNION.

efficient way to write this query - audit histroy on created and modified

just wondering if there is a better and more efficient way of creating this query as the below is taking a long time as this query is being run for every table in the database catalogue. Thank you
Select N'MSCRM_REPORTING' As [Database], N'dbo' As [Schema], N'apuk_erqanswerBase' As [Table], N'ModifiedOn' As ChangeType,
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) -7 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) THEN 1 ELSE 0 END) [0-7 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-28 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)- 8 THEN 1 ELSE 0 END) [8-28 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-84 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-29 THEN 1 ELSE 0 END) [29-84 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0,ModifiedOn), 0) between DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-182 AND DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)-85 THEN 1 ELSE 0 END) [85-182 Days],
sum(case when DATEADD(dd, DATEDIFF(dd, 0, ModifiedOn), 0) BETWEEN convert(datetime,0) and DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) - 183 THEN 1 ELSE 0 END) [183+],
sum(case when ModifiedOn is null then 1 else 0 end) [NullRows],
count(*) as [RowCount]
From MSCRM_REPORTING.dbo.apuk_erqanswerBase
Having multiple DATEDIFFs will be costly, so why not try getting the difference between the dates in a subquery and using that within the SELECT:
Select N'MSCRM_REPORTING' As [Database], N'dbo' As [Schema], N'apuk_erqanswerBase' As [Table], N'ModifiedOn' As ChangeType,
sum(case when a.Days BETWEEN 0 AND 7 THEN 1 ELSE 0 END) [0-7 Days],
sum(case when a.Days BETWEEN 8 AND 28 THEN 1 ELSE 0 END) [8-28 Days],
sum(case when a.Days BETWEEN 29 AND 84 THEN 1 ELSE 0 END) [29-84 Days],
sum(case when a.Days BETWEEN 85 AND 182 THEN 1 ELSE 0 END) [85-182 Days],
sum(case when a.Days >= 183 THEN 1 ELSE 0 END) [183+],
sum(case when ModifiedOn is null then 1 else 0 end) [NullRows],
count(*) as [RowCount]
From
(
Select DATEDIFF(dd, ModifiedOn, getdate()) AS [Days],
ModifiedOn
From MSCRM_REPORTING.dbo.apuk_erqanswerBase
) a
You can try this as well:
Select N'MSCRM_REPORTING' As [Database],
N'dbo' As [Schema],
N'apuk_erqanswerBase' As [Table],
N'ModifiedOn' As ChangeType,
sum(case when DATEDIFF(dd, ModifiedOn, getdate()) BETWEEN 0 AND 7 THEN 1 ELSE 0 END) [0-7 Days],
sum(case when DATEDIFF(dd, ModifiedOn, getdate()) BETWEEN 8 AND 28 THEN 1 ELSE 0 END) [8-28 Days],
sum(case when DATEDIFF(dd, ModifiedOn, getdate()) BETWEEN 29 AND 84 THEN 1 ELSE 0 END) [29-84 Days],
---------------------
from MSCRM_REPORTING.dbo.apuk_erqanswerBase

1 part of case clause not working correctly

im having a little trouble with a case clause. The problem is in the last portion ending in DueBeyond, i need this to return any of our orders in our system that is due beyond tomorrow, as in 2 days from today. sorry to be overly obvious.
SUM(CASE WHEN CURRENT_TIMESTAMP > oi.RequiredByDate THEN 1 ELSE 0 END) as PastDue
,SUM(CASE WHEN DATEADD(dd, DATEDIFF(dd, 0, oi.RequiredByDate), 0) = dateadd(day, datediff(day, '19000101',CURRENT_TIMESTAMP),'19000102') then 1 ELSE 0 END) as DueTomorrow
,SUM(CASE WHEN dbo.TruncateDate(CURRENT_TIMESTAMP) = dbo.TruncateDate(oi.RequiredByDate) THEN 1 Else 0 END) as DueToday
,SUM(CASE WHEN DateDiff(day, getdate(), RequiredByDate) BETWEEN 2 and 7 AND DateName(weekday, RequiredByDate) = 'Monday' Then 1 ELSE 0 END) as DueMonday
,SUM(CASE WHEN dbo.TruncateDate(CURRENT_TIMESTAMP) <= dbo.TruncateDate(oi.RequiredByDate) THEN 1 ELSE 0 END) as DueBeyond
If you add two days to the current date and then see if that is still less than or equal to your required date it must be no sooner than two days in the future.
,SUM(CASE WHEN DATEADD(DAY, 2,dbo.TruncateDate(CURRENT_TIMESTAMP)) <=
dbo.TruncateDate(oi.RequiredByDate) THEN 1 ELSE 0 END) as DueBeyond

SQL Grouping and DATEDIFF Issue

The query below is using Axosoft's OnTime DB with a few custom fields. If you ignore the custom fields and have some sample data this should work.
What I'm trying to do:
Return a query that has a count(total) number of open tickets that have been open during these time frames:
Less than a day
1 Day
2 Days
3 Days
4 Days
5 Days
6 Days
More than a week
this is for a ticket aging query. Here's the query below:
DECLARE #endDate DateTime;
SET #endDate = '03/18/2011';
WITH
WorkItems AS
(
SELECT
i.ProjectID AS ProjectID,
CASE WHEN ic.Custom_279 = 'Bug' THEN 'Issue' WHEN ic.Custom_279 IS NULL THEN 'Other' WHEN LTRIM(RTRIM(ic.Custom_279)) = '' THEN 'Other' ELSE ic.Custom_279 END AS WorkItemType,
i.IncidentNumber AS ID,
i.Name AS Name,
--CASE WHEN ic.Custom_264 < '1901-01-01' THEN NULL ELSE ic.Custom_264 END AS DateReported,
CASE WHEN i.CreatedDateTime < '1901-01-01' THEN NULL ELSE i.CreatedDateTime END AS DateReported,
CASE WHEN ic.Custom_265 < '1901-01-01' THEN NULL ELSE ic.Custom_265 END AS DateResolutionBegan,
CASE WHEN ic.Custom_266 < '1901-01-01' THEN NULL ELSE ic.Custom_266 END AS DateSignoffRequested,
CASE WHEN ic.Custom_267 < '1901-01-01' THEN NULL ELSE ic.Custom_267 END AS DateClosed
FROM
dbo.Incidents AS i
INNER JOIN dbo.IncidentCustomFields AS ic ON ic.IncidentID = i.IncidentID
WHERE
i.Archived = 0
),
ProjectDescendantsIncludingSelf AS
(
SELECT
p.ProjectID AS ProjectID,
p.ProjectID AS DescendantProjectID,
CAST('/' + p.Name AS NVARCHAR) AS ProjectPath
FROM
dbo.Projects AS p
UNION ALL
SELECT
pd.ProjectID AS ProjectID,
p.ProjectID AS DescendantProjectID,
CAST(pd.ProjectPath + N'/' + p.Name AS NVARCHAR) AS ProjectPath
FROM
ProjectDescendantsIncludingSelf AS pd
INNER JOIN dbo.Projects AS p ON p.ParentID = pd.DescendantProjectID
),
OpenTicketsLessThanDay AS
(SELECT
COUNT(ID) AS [LessThanDayTicketCount],
CASE WHEN DATEDIFF(DAY, DateReported, #endDate) < 1 THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [LessThanDay],
--CASE WHEN (DATEDIFF(DAY, DateReported, #endDate) > 1) AND (DATEDIFF(DAY, DateReported, #endDate) <= 2) THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [GreaterThan1Day],
--CASE WHEN (DATEDIFF(DAY, DateReported, #endDate) > 2) AND (DATEDIFF(DAY, DateReported, #endDate) <= 3) THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [GreaterThan2Days],
--CASE WHEN (DATEDIFF(DAY, DateReported, #endDate) > 3) AND (DATEDIFF(DAY, DateReported, #endDate) <= 4) THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [GreaterThan3Days],
--CASE WHEN (DATEDIFF(DAY, DateReported, #endDate) > 4) AND (DATEDIFF(DAY, DateReported, #endDate) <= 5) THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [GreaterThan4Days],
--CASE WHEN (DATEDIFF(DAY, DateReported, #endDate) > 5) AND (DATEDIFF(DAY, DateReported, #endDate) <= 6) THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [GreaterThan5Days],
--CASE WHEN (DATEDIFF(DAY, DateReported, #endDate) > 6) AND (DATEDIFF(DAY, DateReported, #endDate) <= 7) THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [GreaterThan6Days],
--CASE WHEN DATEDIFF(WEEK, DateReported, #endDate) > 1 THEN DATEDIFF(DAY, DateReported, #endDate) ELSE NULL END AS [GreaterThanWeek],
--DateReported,
--DateClosed,
--d.ProjectPath
FROM WorkItems wi
INNER JOIN ProjectDescendantsIncludingSelf d ON d.DescendantProjectID = wi.ProjectID
WHERE
DateReported < #endDate AND
(DateClosed IS NULL OR DateClosed > #endDate) AND
d.ProjectID = 182 AND
d.DescendantProjectID != 185
GROUP BY LessThanDay
)
SELECT [LessThanDayTicketCount] FROM OpenTicketsLessThanDay
GROUP BY LessThanDay
ORDER BY LessThanDay ASC
I presume you need something like one or the other of these.
DECLARE #EndDate datetime = getdate()
SELECT
COUNT(CASE WHEN modify_date > DATEADD(DAY,-1,#EndDate) THEN 1 END) AS [LessThanDay],
COUNT(CASE WHEN modify_date > DATEADD(DAY,-2,#EndDate) AND modify_date <= DATEADD(DAY,-1,#EndDate) THEN 1 END) AS [GreaterThan1Day],
COUNT(CASE WHEN modify_date > DATEADD(DAY,-3,#EndDate) AND modify_date <= DATEADD(DAY,-2,#EndDate) THEN 1 END) AS [GreaterThan2Days],
COUNT(CASE WHEN modify_date > DATEADD(DAY,-4,#EndDate) AND modify_date <= DATEADD(DAY,-3,#EndDate) THEN 1 END) AS [GreaterThan3Days],
COUNT(CASE WHEN modify_date > DATEADD(DAY,-5,#EndDate) AND modify_date <= DATEADD(DAY,-4,#EndDate) THEN 1 END) AS [GreaterThan4Days],
COUNT(CASE WHEN modify_date > DATEADD(DAY,-6,#EndDate) AND modify_date <= DATEADD(DAY,-5,#EndDate) THEN 1 END) AS [GreaterThan5Days],
COUNT(CASE WHEN modify_date > DATEADD(DAY,-7,#EndDate) AND modify_date <= DATEADD(DAY,-6,#EndDate) THEN 1 END) AS [GreaterThan6Days],
COUNT(CASE WHEN modify_date <= DATEADD(DAY,-7,#EndDate) THEN 1 END) AS [GreaterThanWeek]
FROM sys.objects
WHERE modify_date <= #EndDate
SELECT
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) = 0 THEN 1 END) AS [LessThanDay],
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) = 1 THEN 1 END) AS [GreaterThan1Day],
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) = 2 THEN 1 END) AS [GreaterThan2Days],
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) = 3 THEN 1 END) AS [GreaterThan3Days],
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) = 4 THEN 1 END) AS [GreaterThan4Days],
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) = 5 THEN 1 END) AS [GreaterThan5Days],
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) = 6 THEN 1 END) AS [GreaterThan6Days],
COUNT(CASE WHEN DATEDIFF(DAY, modify_date, #EndDate) > 6 THEN 1 END) AS [GreaterThanWeek]
FROM sys.objects
WHERE modify_date <= #EndDate