SQL SUM值需要,然后是2个表的AVERAGE

时间:2015-01-04 19:46:44

标签: sql-server if-statement sum case average

由此可以实现以下目标:

   TABLE 1
   Id | final | Date
   ------------------
    1    236    02-11-14
    2     10    07-01-12
    3     58    09-02-10

   TABLE 2
   Id | final | Date
 ------------------
   1     330    02-11-14
   2     5      07-01-12
   3     100    09-02-10

添加表1和表2的Sum'd值(最终列),然后从中计算出AVG编号,并将其创建为另一列平均值,然后如果table2为SUM'd原始量(在AVG之前) )高于表1 SUM'd量创建另一列并在该列中打印'Tbl2具有更高的数量'并且如果表1具有更高的数量,则为vise verser。

最终结果列方式表如下所示:

  |tb1_final_amount|tb2_final_amount|Avg_Amount|Top_Score_tbl


   |tb1_final_amount|tb2_final_amount|Avg_Amount|Top_Score_tbl
        304              435           369.5      tb2 has highest score

2 个答案:

答案 0 :(得分:1)

这是(很多)这样做的一种方式。您可以总结这两个表,并在查询中将它们用作派生表,如下所示:

select 
    tb1_final_amount, 
    tb2_final_amount, 
    (tb1_final_amount+tb2_final_amount)/2.0 as Avg_Amount, 
    case 
       when tb1_final_amount < tb2_final_amount then 'tb2 has highest score' 
       else 'tb1 has highest score' 
    end as Top_Score_tbl 
from 
    (select SUM(final) as tb1_final_amount from TABLE1) t1, 
    (select SUM(final) as tb2_final_amount from TABLE2) t2

答案 1 :(得分:0)

这就是诀窍!:

--SET UP Table1
CREATE TABLE Table1 (ID INT, final INT, [Date] DATETIME)
INSERT Table1 VALUES (1, 236, '20141102')
INSERT Table1 VALUES (2,  10, '20120107')
INSERT Table1 VALUES (3,  58, '20100209')

--SET UP Table2
CREATE TABLE Table2 (ID INT, final INT, [Date] DATETIME)
INSERT Table2 VALUES (1, 330, '20141102')
INSERT Table2 VALUES (2,   5, '20120107')
INSERT Table2 VALUES (3, 100, '20100209')

-- Query
SELECT
  SUM(CASE WHEN t.TableName = 'Table1' THEN T.final
           ELSE 0
      END) AS tb1_final_amount,
  SUM(CASE WHEN t.TableName = 'Table2' THEN T.final
           ELSE 0
      END) AS tb2_final_amount,
  AVG(T.final) AS Avg_Amount,
  ISNULL((
          SELECT
            'Table1'
          FROM
            Table1 T1
          WHERE
            SUM(CASE WHEN t.TableName = 'Table1' THEN T.final
                     ELSE 0
                END) > SUM(CASE WHEN t.TableName = 'Table2' THEN T.final
                                ELSE 0
                           END)
         ), 'Table2')
FROM
  (
   SELECT
    'Table1' AS TableName,
    final
   FROM
    Table1
   UNION ALL
   SELECT
    'Table2',
    final
   FROM
    Table2
  ) AS T
相关问题