2016-06-22 8 views
3

私はこの問題を解決しようとしていますが、私の "Oriented Language"の考え方は、SQLクエリーの日数を合計する方法を理解できません。見積もり時間を計算する行

enter image description here

基本的に私は自分のデータベースに要求し、その要求のステータスがオープン、保留中または閉鎖された日を持つテーブルがあります。

ステータスが開いていた日数と保留中の日数を示すクエリを返したいとします。

オープン日は、オープン要求と要求がペンディング/クローズに移行した瞬間の間にDATEDIFFによって計算されます。保留中の要求は、要求が保留中に移動されてから瞬間が再び開かれるまでのDATEDIFFです。

私はいくつかの解決策で取り組んできましたが、正直で、私は近くにいないと言います。

ご協力いただきありがとうございます。

+2

あなたが十分に与えられていません私たちが答えを出すための質問の情報。 [良いSQL質問をするためのヒント](http://meta.stackoverflow.com/a/271056/2835541)をお読みください。 –

+0

クリス、私が持っているテーブルと私が戻したいクエリーを示しました。私はそれを提供できるように、より多くの情報が必要ですか? –

+0

私は、開かれた日と未定の日数がどのように計算されるかを簡潔に説明します。 –

答えて

1
;WITH cte AS(
SELECT ID, 
     [Request ID], 
     [Status], 
     CreationDate, 
     ROW_NUMBER() OVER (PARTITION BY ID ORDER BY CreationDate) as rn 
FROM YourTable y 
) 

SELECT * 
FROM (
    SELECT c1.ID, 
      c1.[Status], 
      DATEDIFF(day,c1.CreationDate,c2.CreationDate) as [days] 
    FROM cte c1 
    LEFT JOIN cte c2 
     ON c1.rn+1 = c2.rn AND c1.ID = c2.ID 
    ) as p 
PIVOT (
    SUM([days]) FOR [Status] IN ([Open], [Pending]) 
) as pvt 

出力:私はこれをテストするために、実際のデータを持っていないので、

ID  Open Pending 
GTGTG6 4  5 
+1

@LuísBaptistaLourenço私は多くのIDを持っていれば答えが変わりました – gofr1

+0

gofr1、私は次のエラーが出ています:列 'Id'が 'cte'のために複数回指定されました。手伝ってくれますか?ありがとう。 –

+1

このテーブルにはどのような列がありますか?多分あなたは2つ以上のテーブルに参加していますか? '*'の代わりに同じ名前を使用する必要があるリストフィールド '' SomeNewName'を追加します。 – gofr1

1

私はあなたのために、この意志は役に立ちわからない、

SELECT ID, 
    MAX(CASE WHEN STATUS='OPEN' THEN DAY(CreationDate) END)- MIN(CASE WHEN STATUS='OPEN' THEN DAY(CreationDate) END)OPENDAYS, 
    MAX(CASE WHEN STATUS = 'CLOSE' THEN DAY(CreationDate)-1 END)- (MAX(CASE WHEN STATUS = 'PENDING' THEN DAY(CreationDate) END)- MIN(CASE WHEN STATUS = 'PENDING' THEN DAY(CreationDate) END)) PENDINGDAYS    
FROM TABLENAME     
GROUP BY ID 
+1

ありがとうございます.Jay :)これは私のためにどのように動作するか見てみよう! –

関連する問題