1

以下のデータセットからレポートを作成する必要があります。レポートは、各日について、列 P、U、D、F、および M の合計と、比率 (M / P+U の集計形式) を表示することになっています。

比率で悩んでいます。ゼロ除算に対応する方法がわかりません。

TYP | TIMESTAMP               | P   | U   | D   | F  | M
------------------------------------------------------------
L   | 2012-04-27 15:47:02.000 | 0   | 949 | 0   | 0  | 949
L   | 2012-04-27 15:48:18.000 | 0   | 949 | 0   | 0  | 949
L   | 2012-04-30 17:15:01.000 | 0   | 0   | 4051| 0  | 0
L   | 2012-04-30 17:44:44.000 | 0   | 984 | 5   | 0  | 986
L   | 2012-05-02 11:12:01.000 | 2117| 0   | 0   | 0  | 0
L   | 2012-05-02 11:12:09.000 | 149 | 4   | 210 | 0  | 157
L   | 2012-05-02 11:12:11.000 | 77  | 0   | 30  | 0  | 43

私のクエリ:

SELECT
CONVERT(date,TIMESTAMP,112) As 'DAY',
SUM(P) As PAS,
SUM(U) As UFR,
SUM(D) As DES,
SUM(F) As FIR,
SUM(M) As MOL,
[M%] = ISNULL( (SUM(M) / NULLIF( SUM(P)+SUM(U), 0 ) )*100, 0),
FROM DATASET
GROUP BY CONVERT(date,TIMESTAMP,112) ORDER BY CONVERT(date,TIMESTAMP,112) DESC

更新:これはレポートです

 DAY         |  PAS   | UFR   | DES   | FIR   | MOL   | M%
----------------------------------------------------------------
2012-05-02   | 2343   |  4    |  240  | 0     |  200  | 0
2012-04-30   | 0      |  984  |  4056 | 0     |  986  | 100
2012-04-27   | 0      |  1898 |  0    | 0     |  1898 | 100
4

1 に答える 1

1

問題は、整数除算を考慮していないことです。

Select Cast([Timestamp] As Date) As 'Day'
  , Sum(P) As Pas
  , Sum(U) As Ufr
  , Sum(D) As Des
  , Sum(F) As Fir
  , Sum(M) As Mol
  , IsNull( (Sum(M) / NullIf( Sum(P) * 1.0000 + Sum(U), 0 ) ) *100, 0) As [M%]
From Dataset
Group By Cast([Timestamp] As Date)
Order By [Day] Desc

SQL フィドルのバージョン

于 2012-05-23T22:29:26.360 に答える