2015-01-04 51 views
0

AVG从这个可能的是以下内容:SQL SUM值需要,然后2个表

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 

ADD都表1和表2 Sum'd值(列最终),然后制定出AVG数字并将其作为另一列平均值,则THEN如果table2例如SUM'd原始金额(AVG之前)高于表1 SUM'd金额创建另一列并在该列中打印'Tbl2具有较高金额'如果表1有更高的金额,请仔细阅读。

最终结果逐列表是这样的:

|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 
+0

你能加上预计输出 –

+0

NoDisplayName我已经改变了预期成绩。删除ID列 –

+0

我想查看预期结果中的记录 –

回答

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 
+0

谢谢你们的帮助,这就是Brillant –

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 
+0

工作得很好:)感谢您的帮助 –