2

問題追跡データベースがあります。ある日付範囲内で、毎日オープンおよびクローズされたすべての問題のレポートを提供できる必要があります。

一度に 1 つの列の結果を生成することができました... すべて開いているか、すべて閉じています。実際には 1 つのレポートであるのに、結果を 2 つの部分に分けて提供する必要があるのではなく、すべてを 1 つのショットで行いたいと考えています。

問題の列は、dteOpen (日時)、dteClosed (日時) です。

これが、開封済みのものをすべて返品するために持っているものです。

Declare @dt1 datetime = '1/1/1900', 
Declare @dt2 datetime = '1/1/1900',
Declare @tT int = 0IF OBJECT_ID('tempdb..#TempDate') IS NoT NULL  
      DROP TABLE #TempDate

;WITH ctedaterange 
     AS (SELECT [rn]=Row_number() 
                       OVER( 
                         ORDER BY (SELECT NULL)) 
         FROM   sys.objects a 
                CROSS JOIN sys.objects b 
                CROSS JOIN sys.objects c 
                CROSS JOIN sys.objects d) 
SELECT CAST(Dateadd(dd, rn, @dt1) AS DATE) As DateRange
into #TempDate
FROM   ctedaterange 
WHERE  [rn] <= Datediff(dd, @dt1, @dt2)

Select td.DateRange,Count(ID)as countNumber 

from #TempDate td
LEFT outer JOIN tblProblemslist pl
ON CAST(pl.dtmOpen AS DATE) = td.DateRange
AND    dtmOpen between @dt1 and @dt2
AND ticketType = @tT
Group by td.DateRange
Order by td.DateRange
4

1 に答える 1

0

基本的にはtblProblemsList再度参加するだけですが、クローズ済みの問題の条件があります。次に、別のクエリをクエリに追加できCOUNTます。

テーブル構造について詳しく知らなくても、次のようなものが必要だと思います。

DECLARE @from       datetime = '12/1/2012'; 
DECLARE @through    datetime = '12/31/2012';
DECLARE @then       datetime = DATEADD(dd, -1, @from);
Declare @ticketType int = 0;

DECLARE @dateRange  table
(
    dateRange   date
    , id        int IDENTITY
)

-- use a loop to populate the @daterange table var
-- rather than selecting from sys.object and
-- using a ranking function
WHILE   @then < @through
BEGIN
    INSERT INTO @dateRange (dateRange) VALUES (DATEADD(dd, 1, @then))
    SET         @then = DATEADD(dd, 1, @then)
END

SELECT      dateRange.dateRange
            , COUNT(listOfOpened.id) AS countOfOpened
            , COUNT(listOfClosed.id) AS countOfClosed
FROM        @dateRange AS dateRange
            LEFT OUTER JOIN tblProblemsList AS listOfOpened
                ON  CAST(listOfOpened.dtmOpen AS DATE) = dateRange.dateRange
                AND listOfOpened.dtmOpen BETWEEN @from AND @through
                AND listOfOpened.ticketType = @ticketType
            LEFT OUTER JOIN tblProblemsList AS listOfClosed
                ON  CAST(listOfClosed.dtmClosed AS DATE) = dateRange.dateRange
                AND listOfClosed.dtmClosed BETWEEN @from AND @through
                AND listOfClosed.ticketType = @ticketType
GROUP BY    dateRange.dateRange
ORDER BY    dateRange.dateRange
于 2013-01-23T21:52:33.693 に答える