2012-02-14 5 views
-2

私はこのような結果を表示する:次のように列ごとにSQL Server CASEキーワードを使用して1つの列から複数の値を数えるには?

私のデータは次のとおりです。

私のWorkOrderはテーブルで
CustomerID FirstName Total_Count_Status ResultMessage 
    1   Noor  10    Completed Calls 
    2   ALi   6    InProgress Calls 
    3   Jhon   9    CallBack Calls 
    4   Maaan  1    MoneyCall Calls 
    5   samuel  5    Cancelled Calls 
    6   Khan   3    Dispatched Calls 

私はOrderStatusID列データを持っている:

OrderStatusID 
3 
2 
3 
5 
7 

I私のケースには以下のハードコードされた値があります:

for Pending = 0, 
for Dispatched = 1, 
    InProgress = 2, 
    Complete = 3, 
    Estimate = 4, 
    CallBack = 5, 
    MoneyCall = 6, 
    Cancelled = 7, 

これはステータスを表示するために使用されます。

は、私は私のテーブル名を持っている:私は、各

ためOrderstatusIDをカウントする列OrderStatusIDを持つWorkOrderはをもしOrderStatusID =「3」我々は、上記のようorderstatusID列と表示結果のすべての3つの値をカウントする必要がありますテーブル。同じ がこのおかげ

すべてのヘルプは高く評価されますが??のように、私は状況にPROCを作成することができますどのように他の..valuesため

です。構文の

+3

こんにちは - あなたはこのSTATAをタグ付けしました。あなたは間違いなくStataを使用していますが、他のデータベースではありませんか?おそらく、この 'sql'とデータベースに代わりにタグを付けるべきです。 – Rup

+0

これがStataに関する質問であるかどうかにかかわらず、本当にあなたがここで何を求めているのかは分かりません。私は書式を整理しようとしましたが、実際に何が尋ねられているのかわからないので、文法をクリーンアップしようとすることさえできませんでした。 – Charles

+0

"not ok"とはどういう意味ですか?エラーメッセージはありますか?予期せぬ出力があったのですか? –

答えて

0

一部です:あなたはあなたの、FROM必要があります

SELECT ..., 
     COUNT(CASE WHEN OrderStatusID = 3 THEN 1 ELSE 0) AS CompletedCalls, 
     COUNT(CASE WHEN OrderStatusID = 2 THEN 1 ELSE 0) AS InProgressCalls, 
     ... 

CASE WHEN <condition> THEN <expression> ELSE <expression> END 

トリックは合計にカウントを変換すると、0または1として式を評価することです、およびGROUP BY句を使用します。

0

はい私は私の問題を解決しました:あなたの答えに感謝します。

は、ここに私の洗練されたクエリです:

**@DateFrom datetime,     
@dateTo datetime     
AS 
    SET NOCOUNT OFF 

SELECT @DateFrom as DateFrom, @dateTo as DateTo, SUM(ISNULL(myTable.TotalCompleted,0)) as TotalCompleted,SUM(ISNULL(TotalMoneyCall,0)) as TotalMoneyCall , 
SUM(ISNULL(myTable.TotalDispatched,0)) as TotalDispatched, SUM(ISNULL(myTable.TotalInProgress,0)) as TotalInProgress, 
SUM(ISNULL(myTable.TotalEstimate,0)) as TotalEstimate, SUM(ISNULL(myTable.TotalCancelled,0)) as TotalCancelled, 
SUM(ISNULL(myTable.TotalPending,0)) as TotalPending FROM 
( 
SELECT @DateFrom as DateFrom, @dateTo as DateTo, 
CASE WHEN ISNULL(OrderStatusID,0)=3 then count(ISNULL(OrderStatusID,0)) end as TotalCompleted, 
CASE WHEN ISNULL(OrderStatusID,0)=6 then count(ISNULL(OrderStatusID,0)) end as TotalMoneyCall, 
CASE WHEN ISNULL(OrderStatusID,0)=1 then count(ISNULL(OrderStatusID,0)) end as TotalDispatched, 
CASE WHEN ISNULL(OrderStatusID,0)=2 then count(ISNULL(OrderStatusID,0)) end as TotalInProgress, 
CASE WHEN ISNULL(OrderStatusID,0)=4 then count(ISNULL(OrderStatusID,0)) end as TotalEstimate, 
CASE WHEN ISNULL(OrderStatusID,0)=7 then count(ISNULL(OrderStatusID,0)) end as TotalCancelled, 
CASE WHEN ISNULL(OrderStatusID,0)=0 then count(ISNULL(OrderStatusID,0)) end as TotalPending 
From WorkOrder where CreatedOn between @DateFrom AND @dateTo group by OrderStatusID, CreatedOn) AS myTable**    
関連する問題