首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询,该查询返回在另一个表中指定的帐户之和,其中定义了sum或范围帐户。

查询,该查询返回在另一个表中指定的帐户之和,其中定义了sum或范围帐户。
EN

Stack Overflow用户
提问于 2017-04-07 19:32:12
回答 2查看 213关注 0票数 0

我有一个桌子,用户正在维护,他们的公关。统计帐户可以定义它们想要汇总的帐户--不管是指定的还是范围的。如何构建一个视图来最好地总结金额、pr帐户和月份。我需要做点什么。帐户可以更改where子句。

下面是两个表: DimStatAccount和FactAmount,下面是预期的视图

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-07 20:53:12

我偷了凯文回答的桌子。可以使用选择变量的能力从DimStatAccount表中创建动态select语句。

代码语言:javascript
复制
CREATE TABLE DimStatAccount (StatAccount varchar(255), Accounts varchar(255), AccountsRange varchar(255))
INSERT INTO DimStatAccount VALUES
  ('Stat1', 'in (1000,1020)', null),
  ('Stat2', 'in (1020,2020)', null),
  ('Stat3', null, 'between 1000 and 1999'),
  ('Stat4', null, 'between 2000 and 2999')

CREATE TABLE FactAmount (Account int, [Month] varchar(255), Amount int)
INSERT INTO FactAmount VALUES
  (1000,'jan',500),
  (1000,'feb',460),
  (1010,'jan',799),
  (1010,'jan',855),
  (1010,'feb',633),
  (1020,'feb',522),
  (2000,'jan',436),
  (2000,'jan',946),
  (2000,'jan',374),
  (2010,'jan',683),
  (2010,'feb',492),
  (2020,'jan',437),
  (2020,'feb',834),
  (2030,'jan',944)

DECLARE @sqlStatement NVARCHAR(MAX) = '';

SELECT @sqlStatement += CONCAT('SELECT ''',StatAccount,''',[Month],SUM(Amount) FROM FactAmount WHERE Account ',ISNULL(Accounts,AccountsRange),' GROUP BY [Month] UNION ALL ')
FROM DimStatAccount
;

SET @sqlStatement = LEFT(@sqlStatement,LEN(@sqlStatement)-10); --remove the final Union All

EXEC sp_executesql @sqlStatement;
票数 2
EN

Stack Overflow用户

发布于 2017-04-07 20:27:40

正如前面已经说过的,动态sql是您所需要的。

代码语言:javascript
复制
CREATE TABLE #dimStatAccount (StatAccount varchar(255), Accounts varchar(255), AccountsRange varchar(255))
INSERT INTO #dimStatAccount VALUES
  ('Stat1', 'in (1000,1020)', null),
  ('Stat2', 'in (1020,2020)', null),
  ('Stat3', null, 'between 1000 and 1999'),
  ('Stat4', null, 'between 2000 and 2999')

CREATE TABLE #factAmount (Account int, [Month] varchar(255), Amount int)
INSERT INTO #factAmount VALUES
  (1000,'jan',500),
  (1000,'feb',460),
  (1010,'jan',799),
  (1010,'jan',855),
  (1010,'feb',633),
  (1020,'feb',522),
  (2000,'jan',436),
  (2000,'jan',946),
  (2000,'jan',374),
  (2010,'jan',683),
  (2010,'feb',492),
  (2020,'jan',437),
  (2020,'feb',834),
  (2030,'jan',944)

CREATE TABLE #result (StatAccount varchar(255), [Month] varchar(255), SumAmount int)

DECLARE @statAccount varchar(255), @accounts varchar(255), @rangeAccounts varchar(255)

DECLARE rcursor CURSOR FOR
  SELECT StatAccount, Accounts, AccountsRange
  FROM #dimStatAccount
OPEN rcursor
FETCH NEXT FROM rcursor
INTO @statAccount, @accounts, @rangeAccounts

WHILE @@FETCH_STATUS = 0
BEGIN
  DECLARE @sql NVARCHAR(max)
  IF @accounts IS NOT NULL
  BEGIN
    SET @Sql = 'INSERT INTO #result '
    SET @sql = @Sql + 'SELECT ''' + @statAccount + ''' AS StatAccount, [MONTH], SUM(f.Amount) AS SumAmount '
    SET @Sql = @Sql + 'FROM #factAmount AS f '
    SET @Sql = @Sql +  'WHERE Account ' + @accounts + ' ' 
    SET @Sql = @Sql +  'GROUP BY [Month]'

    EXEC sp_executesql @Sql

    FETCH NEXT FROM rcursor
    INTO @statAccount, @accounts, @rangeAccounts
  END   
  IF @rangeAccounts IS NOT NULL
  BEGIN
    SET @Sql = 'INSERT INTO #result '
    SET @sql = @Sql + 'SELECT ''' + @statAccount + ''' AS StatAccount, [MONTH], SUM(f.Amount) AS SumAmount '
    SET @Sql = @Sql + 'FROM #factAmount AS f '
    SET @Sql = @Sql +  'WHERE Account ' + @rangeAccounts + ' ' 
    SET @Sql = @Sql +  'GROUP BY [Month]'
    print @Sql
    EXEC sp_executesql @Sql

    FETCH NEXT FROM rcursor
    INTO @statAccount, @accounts, @rangeAccounts
  END
END

CLOSE rcursor 
DEALLOCATE rcursor 

SELECT * FROM #result

结果

代码语言:javascript
复制
StatAccount  Month  SumAmount
-----------------------------
Stat1        feb    982
Stat1        jan    500
Stat2        feb    1356
Stat2        jan    437
Stat3        feb    1615
Stat3        jan    2154
Stat4        feb    1326
Stat4        jan    3820
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43285819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档