2012-05-04 19 views
2

(SQL Server 2008を使用)ビューを作成してからビューを作成すると、これを簡単に実行できますが、これを1つのSQLクエリで実行したいと思います。私は2つの列(DeliveredDate(DateTime)、Delivered(Varchar))を含むテーブルを持っています。最初にDeliveredDateをDateのみに変換してから、Dateでグループ化します。同時に、私は配信時カウント(列はYESまたはNULL)を実行しています。ここで私はこの部分を達成するために使用するものである:出力としてSQL実行中の集計日付別

SELECT CAST([DeliveredDate] As Date), 
     COUNT([Delivered]) 
    FROM [TableName] 
    GROUP BY CAST([DeliveredDate] As Date) 
    ORDER BY CAST([DeliveredDate] As Date) 

、私のような何かを得る:私が探している何

DeliveredDate | Delivered 
2012-04-24   10 
2012-04-25   500 
2012-04-26   422 
2012-04-27   33 

を、このようなものです:

DeliveredDate | Delivered | RunningTotal 
2012-04-24   10   10 
2012-04-25   500   510 
2012-04-26   422   932 
2012-04-27   33   965 

私はここで見てきたさまざまな例を試しましたが、このCountでCountとRunningTotalを実行するこのシナリオと一致するものはありません。 (配信)

select 
    cast(DeliveredDate as date) as DeliveredDate, 
    count(Delivered) as Delivered, 
    sum(count(Delivered)) over (
    order by DeliveredDate 
) as RunningTotal 
from Orders 
group by OrderDate 
order by OrderDate; 

あなたの式countビット奇妙です:あなたはSUMための条項OVER注文実装し、製品を使用している場合

+2

それはあなたが使用しているRDBMSたと言って便利です。 – Marc

+0

SQL Server 2008 – JasonH

答えて

1

私はCTEは、ビューとしてカウントかはわからないが、これはSQLで動作します2005+、

WITH cte (DeliveredDate, Delivered) 
    AS (SELECT Cast([DeliveredDate] AS DATE) DeliveredDate, 
       Count([Delivered]) Delivered 
     FROM [TableName] 
     GROUP BY Cast([DeliveredDate] AS DATE)) 
SELECT d1.delivereddate, 
     d1.delivered, 
     Sum(d2.Delivered) RunningTotal 
FROM cte d1 
     LEFT JOIN cte d2 
     ON d1.delivereddate >= d2.DeliveredDate 
GROUP BY d1.delivereddate, 
      d1.delivered 
ORDER BY d1.delivereddate 
+0

このコードには問題がありますが、どこに行くのが好きです。私はcteとd1の間にスペースがあると思います。そして、2番目のGroup ByはOrder Byであると考えられますか?私がこれを実行すると、「cteの列1に列名が指定されていません」 – JasonH

+0

@JasonH dohそれは残念です。私は[実行中の合計をテストする](http://sqlfiddle.com/#!3/0eae2/3)についてもっと心配していましたが、私はCTEを入れてしまいました。それはすべて今すぐ修正する必要があります –

+0

ありがとう、真剣に、この1つ私のすべての脳を昨日 – JasonH

3

は、あなたがこのような何かを行うことができます。それがあなたの望むものであることを確かめるだけです。Deliveredカラムの値がNULLでない特定の日付の行数を数えます。 SUMためOVER注文の句をサポートしていない

+0

私の状況では、この回答は機能しません。私が使用しているSQLのバージョンではサポートされていません。 – JasonH

+0

SQL Server 2008は 'OVER'をサポートしていますが、集約関数の' OVER'内で 'ORDER BY'をサポートしているとは思いません。 – Chad

+0

SQL ServerはSQL Server 2012の場合にのみこれをサポートしています。 –

関連する問題