2

従業員の毎日の売上情報をすべて取得するコミッション レポート機能があります。 fCommissionINFO 私がやりたいことは、出力に基づいてさまざまな情報を取得し、コミッション レポートを作成することです。たとえば、関数は総顧客数、特定の売上の説明を取得します。私がやりたいのは、合計販売数、特定販売の合計数、および特定販売の割合を数えることです。たとえば… 「サラ」の総売上が「100」の場合… 100 の売上のうち、サービス「x」が 3 つ(合計 3%)、サービス Y が 5 つ(5%)、サービス Y が 6 つ(合計 3%)サービス「z」(6%) etc.etc...

私の最初の2つのストアド関数呼び出しは次のとおりです。

Select UserName, SUM(CarCount) AS Cars
FROM dbo.fCommissionINFO(@startdate, @endate, 'ALL', 'ALL', '1', 'ALL', 'Combined', '0') AS fCommissionINFO_1
WHERE (Services > 0)
GROUP BY UserName 

SELECT COUNT(Description) AS [service x]
FROM dbo.fCommissioninfo(@startdate, @endate, 'ALL', 'ALL', '1', 'ALL', 'Combined', '0') AS fCommissionINFO_1
WHERE (Description = 'service x')

これらを組み合わせて、3 分の 1 を組み合わせてユーザー名と一致させるにはどうすればよいですか?

4

3 に答える 3

1

このクエリが必要です

 SELECT UserName,            
        (SUM(COUNT(CASE WHEN Description = 'service x' THEN 1  END)) OVER() * 100) /
        SUM(CASE WHEN [Services] > 0 THEN CarCount END) AS percentage
 FROM dbo.fCommissioninfo(@startdate, @endate, 'ALL', 'ALL', '1', 'ALL', 'Combined', '0') AS fCommissionINFO_1
 GROUP BY UserName

SQLFiddle の簡単な例

于 2013-03-02T23:23:25.240 に答える
0
Select UserName, SUM(CarCount) AS Cars, COUNT(Description) AS [service x]
FROM dbo.fCommissionINFO(@startdate, @endate, 'ALL', 'ALL', '1', 'ALL', 'Combined', '0') AS fCommissionINFO_1
WHERE (Services > 0)
GROUP BY UserName, Description
于 2013-02-22T12:22:02.633 に答える
0

私は次のことがトリックを行うべきだと信じています。カウント内へのwhere句の巻き上げに注意してください。これは、services <= 0で、'service x'の説明がある行があった場合、それは上のクエリによって除外され、下のクエリに含まれるためです。したがって、クエリを組み合わせるだけで、データに応じて異なる結果を得ることができます。

Select UserName, 
SUM(CASE WHEN Services > 0 THEN CarCount ELSE 0 END) AS Cars,
COUNT(CASE Description = 'service x' THEN 1 ELSE 0 END) 
FROM            dbo.fCommissionINFO(@startdate, @endate, 'ALL', 'ALL', '1', 'ALL', 'Combined', '0') AS fCommissionINFO_1
GROUP BY UserName 
于 2013-02-22T13:03:09.130 に答える