【问题标题】:want to recreate my asp.net code in my sql想在 mysql 中重新创建我的 asp.net 代码
【发布时间】:2011-06-14 18:32:22
【问题描述】:

我目前有一个 asp.net 页面,它接收来自该视图的数据,并根据百分比更改金额字段的文本。这意味着如果用户达到一定的百分比,他们将获得一定的激励金额。

但是,我目前正在我的程序中执行此操作,但出于报告目的,我希望能够直接在 sql 中执行此操作,而不是在我的 asp.net 页面中。

我想做的几乎是 如果百分比列 = 65% 到 70% 然后金额栏 = 如果百分比列 = 70 到 75,则为 50 百分比然后金额列 = 75

直接在我的数据视图中,而不是在我的 asp.net页面

If Decimal.Parse(percent.Text) >= 0.65 And percent.Text < 0.7 Then
                Amount.Text = 50
            ElseIf Decimal.Parse(percent.Text) >= 0.7 And percent.Text < 0.75 Then
                Amount.Text = 75
            ElseIf Decimal.Parse(percent.Text) >= 0.75 And percent.Text < 0.8 Then
                Amount.Text = 200
            ElseIf Decimal.Parse(percent.Text) >= 0.8 And percent.Text < 0.85 Then
                Amount.Text = 500
            ElseIf Decimal.Parse(percent.Text) >= 0.85 And percent.Text < 0.9 Then
                Amount.Text = 625
            ElseIf Decimal.Parse(percent.Text) >= 0.9 And percent.Text < 0.95 Then
                Amount.Text = 750
            ElseIf Decimal.Parse(percent.Text) >= 0.95 And percent.Text < 1.0 Then
                Amount.Text = 1000 

这是我的视图查询,我几乎想添加一个 if 语句,但我不确定这是否是最好的方法。

SELECT     TOP (100) PERCENT SUM(yes) AS Countreported, SUM(no) AS Countnotreported, SUM(yes) + SUM(no) AS count, BMM, BYYYY, userid, SUM(pax) 
                          AS party, CAST(SUM(yes) AS decimal(4, 1)) / (SUM(yes) + SUM(no)) AS percentage
    FROM         (SELECT     SUM(CASE WHEN [insreported] IS NULL THEN 0 WHEN [insreported] = 'YES' THEN 1 ELSE 0 END) AS yes, 
                                                  SUM(CASE WHEN [insreported] IS NULL THEN 1 WHEN [insreported] = 'YES' THEN 0 ELSE 1 END) AS no, CASE WHEN USERID = 'chrisn' OR
                                                  USERID = 'CHRISN' THEN 'chrism' ELSE USERID END AS userid, dbo.agent_insurance_incentive_data.BMM, 
                                                  dbo.agent_insurance_incentive_data.BYYYY, SUM(dbo.agent_insurance_incentive_data.PARTY) AS pax, 
                                                  dbo.incentive_agents.department
                           FROM          dbo.agent_insurance_incentive_data LEFT OUTER JOIN
                                                  dbo.incentive_agents ON dbo.agent_insurance_incentive_data.USERID = dbo.incentive_agents.agent
                           WHERE      (dbo.agent_insurance_incentive_data.DYYYY >= '2009') AND (dbo.agent_insurance_incentive_data.BYYYY > 2008)
                           GROUP BY dbo.agent_insurance_incentive_data.USERID, dbo.agent_insurance_incentive_data.BMM, dbo.agent_insurance_incentive_data.BYYYY, 
                                                  dbo.agent_insurance_incentive_data.DMM, dbo.agent_insurance_incentive_data.DYYYY, dbo.incentive_agents.department) 
                          AS derived
    WHERE     (userid IN
                              (SELECT     agent
                                FROM          dbo.incentive_agents AS incentive_agents_1)) OR
                          (userid = 'chrisn')
    GROUP BY BMM, BYYYY, userid
    ORDER BY userid, BYYYY, BMM

【问题讨论】:

  • 对不起,我回去接受了答案

标签: asp.net sql sql-server-2005


【解决方案1】:

从概念上讲,这应该相当简单。只需对您的查询采用以下公式即可。

Declare @Tmp Table(
    Percentage float 
)

Insert Into @Tmp Values (.65)
Insert Into @Tmp Values (.7)
Insert Into @Tmp Values (.75)
Insert Into @Tmp Values (.8)
Insert Into @Tmp Values (.85)
Insert Into @Tmp Values (.9)
Insert Into @Tmp Values (.95)

SELECT 
    CASE
        WHEN Percentage >= .65 AND Percentage < .7 THEN 50
        WHEN Percentage >= .7 AND Percentage < .75 THEN 75
        WHEN Percentage >= .75 AND Percentage < .8 THEN 200
        WHEN Percentage >= .8 AND Percentage < .85 THEN 500
        WHEN Percentage >= .85 AND Percentage < .9 THEN 625
        WHEN Percentage >= .9 AND Percentage < .95 THEN 750
        WHEN Percentage >= .95 AND Percentage < 1 THEN 1000
    END AS Amount,
    Percentage
FROM 
    @Tmp

编辑:

因为我不能(没有时间)重新创建您的表格和数据。

难道你不能这样做:

SELECT 
    CASE
        WHEN Percentage >= .65 AND Percentage < .7 THEN 50
        WHEN Percentage >= .7 AND Percentage < .75 THEN 75
        WHEN Percentage >= .75 AND Percentage < .8 THEN 200
        WHEN Percentage >= .8 AND Percentage < .85 THEN 500
        WHEN Percentage >= .85 AND Percentage < .9 THEN 625
        WHEN Percentage >= .9 AND Percentage < .95 THEN 750
        WHEN Percentage >= .95 AND Percentage < 1 THEN 1000
    END AS Amount,
    *   
FROM 
(
    --Insert your query here
)Tmp2

--OR IF SQL doesn't like the GroupBy/OrderBy statements in the Sub Select 

Declare @Tmp3 Table(
    Countreported float,
    Countnotreported float,
    [count] float,
    BMM float,
    BYYYY float,
    userid int, 
    party int, 
    percentage decimal
)

INSERT INTO @Tmp3
    --Insert your query here

SELECT 
    CASE
        WHEN Percentage >= .65 AND Percentage < .7 THEN 50
        WHEN Percentage >= .7 AND Percentage < .75 THEN 75
        WHEN Percentage >= .75 AND Percentage < .8 THEN 200
        WHEN Percentage >= .8 AND Percentage < .85 THEN 500
        WHEN Percentage >= .85 AND Percentage < .9 THEN 625
        WHEN Percentage >= .9 AND Percentage < .95 THEN 750
        WHEN Percentage >= .95 AND Percentage < 1 THEN 1000
    END AS Amount,
    *   
FROM 
    @Tmp3

【讨论】:

  • 嗯,我在将这个方法添加到我的查询时遇到问题
猜你喜欢
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2019-10-16
  • 2021-11-30
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多