none
我想大概是用if 或 case 之类的语句吧, RRS feed

  • 问题

  • 有个表ContactTable(租金表),其中有三个字段ContractNumber(主键,合同号,nvchar())、PayType(付款方式,nvchar)和monthRent(月或季度租金,int).

    假设PayType有两种形式,第一种按月收,第二种按季度收。

    现在我求某一个月的租金,那么,按月收的租金很简单,但按季度收的租金我要把它除以3,然后再加总(SUM)!

    我想大概是用if 或 case 之类的语句吧,可是书上还没见过这么复杂点的例子!

    在此求教!谢谢大家!


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    • 已移动 Sheng Jiang 蒋晟 2011年9月16日 23:23 SQL问题 (发件人:ASP.NET 与 AJAX)
    2011年9月16日 11:36

答案

  • 你好

    問題一: 可以不用那麼多的CASE.. 一個使可以

    E.G.

     

    select sum(
    CASE WHEN PayType = '季度' THEN MonthRent/3
    WHEN PayType = '半年' 
    THEN MonthRent/6
     WHEN PayType = '年度' THEN MonthRent/12          
      ELSE MonthRent END) AS MonthRent from tablename


     

    第二个问题:假如再增加一个‘不定期’,当PayType是‘不定期’的时候MonthRent为‘0’

     

    你可以嘗試以下的CODE

    加入 WHEN PayType = '不定期'  THEN 0       使可以了

     

    select sum( CASE WHEN PayType = '季度' THEN MonthRent/3
    
    WHEN  PayType ='半年'  THEN MonthRent/6
     WHEN PayType = '年度' THEN MonthRent/12    
    WHEN PayType = '不定期'  THEN 0      
      ELSE MonthRent END) AS MonthRent from tablename


     

    因為這個是SELECT 的STATEMENT..所以不會更新你TABLE 上的數據值的

     

    Please correct me if my concept is wrong


    Chi

    2011年9月19日 12:53

全部回复

  • 报表查询啊,去看NorthWind示例吧,这个和ASP.Net无关。

     



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年9月16日 23:23
  • 按季度收的租金我要把它除以3,然后再加总(SUM)--你这个是什么算法?季度是三个月,你只需要除以3就可以了,为什么还要合计?


    family as water
    2011年9月17日 1:32
  • 没看到有两个表呀?MonthRent 怎么是这个字段名呀?最起码应该是Rent吧

    基本上需要这样吧:

    SELECT

    ....

    CASE WHEN PayType = '季度' THEN MonthRent/3 ELSE MonthRent END AS MonthRent

    ...

    2011年9月17日 2:13
    版主
  •     因为ContractNumber有很多个值,每个值对应不同的的PayType(付款方式,nvchar)和monthRent(月或季度租金,int)。

        现在我要做的是,如果PayType(付款方式,nvchar)是按季度收的话,就把monthRent先除以3,再把所有的MonthRent求和!(如果PayType是按月收的话,monthRent不变

        该怎么做呢?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年9月17日 11:17
  • 只有一个表ContractTable啊!这个表只有3个字段!

        看您的sql语句,您已经明白我的想法了!但是还有求Sum的功能呢?该怎么写?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年9月17日 11:20
  • select sum(CASE WHEN PayType = '季度' THEN MonthRent/3 ELSE MonthRent END) AS MonthRent from tablename
    
    

     

    2011年9月18日 13:13
    版主
  • 多谢解答!想再深入问一下:

        第一个问题:假如再增加一些更多的选项,是否这样写:

     

    select sum(
    CASE WHEN PayType = '季度' THEN MonthRent/3
    CASE WHEN PayType = '半年' THEN MonthRent/6
    CASE WHEN PayType = '年度' THEN MonthRent/12          
     ELSE MonthRent END) AS MonthRent from tablename
     

    -


    -   第二个问题:假如再增加一个‘不定期’,当PayType是‘不定期’的时候MonthRent为‘0’


    (PayType = '不定期' Then MonthRent=0),我这样写会不会把原来MonthRent的值变成0呢?
    原来的MonthRent变成0可不是我的本意啊!像Sum这类的聚合函数应该都不会改变MonthRent的原值吧?!

     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年9月19日 10:56
  • 你好

    問題一: 可以不用那麼多的CASE.. 一個使可以

    E.G.

     

    select sum(
    CASE WHEN PayType = '季度' THEN MonthRent/3
    WHEN PayType = '半年' 
    THEN MonthRent/6
     WHEN PayType = '年度' THEN MonthRent/12          
      ELSE MonthRent END) AS MonthRent from tablename


     

    第二个问题:假如再增加一个‘不定期’,当PayType是‘不定期’的时候MonthRent为‘0’

     

    你可以嘗試以下的CODE

    加入 WHEN PayType = '不定期'  THEN 0       使可以了

     

    select sum( CASE WHEN PayType = '季度' THEN MonthRent/3
    
    WHEN  PayType ='半年'  THEN MonthRent/6
     WHEN PayType = '年度' THEN MonthRent/12    
    WHEN PayType = '不定期'  THEN 0      
      ELSE MonthRent END) AS MonthRent from tablename


     

    因為這個是SELECT 的STATEMENT..所以不會更新你TABLE 上的數據值的

     

    Please correct me if my concept is wrong


    Chi

    2011年9月19日 12:53