次の機能があり、パーツを取り出してSELECT
別のビューを作成する必要があります。
CREATE FUNCTION dbo.dbf_get_penalty_points
( @pn_seq_party_id NUMERIC(18),
@pv_penalty_points_code CHAR(1) = 'Y') -- Use 'N' for total points, otherwise will return Current Penalty Points
RETURNS NUMERIC(18,0)
AS
BEGIN
DECLARE @n_penalty_points NUMERIC(18),
@d_latest_points_date DATETIME
SELECT @d_latest_points_date = dbo.dbf_trunc_date(DateAdd(mm, - Abs(Convert(NUMERIC(18,0),dbo.dbf_get_sys_param('CMS2', 'PP_MONTHS'))), GetDate()))
SELECT @n_penalty_points = IsNull(Sum(penalty_points_amount),0)
FROM dbo.ar_penalty_point WITH(NOLOCK)
WHERE seq_party_id = @pn_seq_party_id
AND 1 = CASE
WHEN @pv_penalty_points_code = 'N' THEN 1
WHEN @pv_penalty_points_code = 'Y' AND added_date >= @d_latest_points_date AND reset_date IS NULL THEN 1
ELSE 0
END
RETURN @n_penalty_points
END
GO
SET QUOTED_IDENTIFIER OFF
GO
GRANT EXECUTE ON dbo.dbf_get_penalty_points TO standard
GO
私は試してみて、これを手に入れました、
SELECT SUM(CASE WHEN added_date >=dbo.dbf_trunc_date(DateAdd(mm, - Abs(Convert(NUMERIC(18,0),dbo.dbf_get_sys_param('CMS2', 'PP_MONTHS'))), GetDate()))
AND reset_date IS NULL THEN 1
ELSE 0) current_points,
IsNull(Sum(penalty_points_amount),0) total_points,
seq_party_id
FROM dbo.ar_penalty_point WITH(NOLOCK)
GROUP BY seq_party_id
今、私は取り除く必要があります
dbo.dbf_trunc_date(DateAdd(mm, - Abs(Convert(NUMERIC(18,0),dbo.dbf_get_sys_param('CMS2', 'PP_MONTHS'))), GetDate()))
SELECT
クエリの部分から。私の意見を書くためのより良い方法はありますか?
EDIT
目的は、total_points と current_points を返すビューを作成することです。理解を深めるために、CREATE
次の部分を参照してください
CREATE FUNCTION dbo.dbf_get_penalty_points
( @pn_seq_party_id NUMERIC(18),
@pv_penalty_points_code CHAR(1) = 'Y') -- Use 'N' for total points, otherwise will return Current Penalty Points
参照-- 合計ポイントには「N」を使用します。それ以外の場合は、コメントに現在のペナルティ ポイントが返されます