在一个视图显示中组合SELECTS

时间:2010-07-13 20:11:05

标签: sql sql-server

我需要知道在一个VIEW中组合多个SELECT语句的方法吗?我尝试了UNION ALL,但由于我使用了唯一的列来聚合GRAND TOTAL,所以它失败了 我是学生,这是小组项目的一部分。

我有一个包含4列的表:account,description,short_description和balance。 COA(会计科目表)是导入的Excel电子表格。

CREATE VIEW [account_balance_sums]
AS
  SELECT SUM(balance) AS total,   
  SUBSTRING (Account,0,2) AS account_group
    FROM COA
    GROUP BY account_group
GO


 SELECT * FROM [account_balance_sums]
 SELECT SUM(total) AS Grand_total
 FROM [account_balance_sums]

3 个答案:

答案 0 :(得分:2)

假设您尝试创建一个视图,为所有帐户中的总计提供一个额外行的帐户组和总余额,那么此视图应有所帮助:

CREATE VIEW [account_balance_sums] AS
  SELECT SUM(balance) AS total, SUBSTRING (Account,0,2) AS account_group
    FROM COA
   GROUP BY account_group
  UNION ALL
  SELECT SUM(balance), 'Grand Total'
    FROM account_group

顺便说一下,帐户名的第一个字符的子字符串表示您在一列中有多个数据。这表示未正确规范化的数据,如果需要最高分,则应该解决这个问题。请参阅普通表单上的wikipedia

答案 1 :(得分:1)

在UNION'd声明中,必须有:

  1. 每个SELECT语句中的列数相同
  2. 数据类型必须在SELECT语句中的每个位置匹配
  3. 使用:

    SELECT * 
      FROM [account_balance_sums]
    UNION ALL
    SELECT SUM(total),
           NULL AS account_group
      FROM [account_balance_sums]
    

答案 2 :(得分:0)

UNION ALL应该有效。像这样的基本结构

select a,b,c,d 
from t1
union all 
select a,b,c,e
from t2

只要d和e是相同的数据类型。

做总和,然后用聚合层包装它 - 使用这个结构作为内联视图(以及其他方法)

类似的东西:

select sum( d )
from (
    select a,b,c,d 
    from t1
    union all 
    select a,b,c,e
    from t2
)