【问题标题】:SQL Server: divide results of a column based on value from 2 other columnsSQL Server:根据来自其他 2 列的值划分列的结果
【发布时间】:2020-06-17 05:55:03
【问题描述】:

我有一张这样的桌子:

我想显示这样的报告(我打算在 SSRS 中这样做):

通过BG_SALES/TOTAL_SALES 计算当前期间和上一期间的百分比。

我该怎么做呢?感谢任何帮助..谢谢

【问题讨论】:

  • 欢迎来到 Stack Overflow!请相应地阅读sql tag infoedit 中您的问题的前几段。
  • 所以我猜您希望您的读者只是“知道”名为“TTL_”的列是您用来计算总销售额的列?编写要求(这实际上就是您在这里所做的)很困难 - 不要做出假设。定义你的意思。报告中的标签通常具有与表格中使用的非常不同的值。请注意,您可以非常轻松地在 SSRS 中进行此类计算。 “更好”的选择取决于您的技能、目标和报告设计。

标签: sql-server tsql reporting-services


【解决方案1】:

我会分两部分来做这件事。首先我会计算你在 SQL 中需要的百分比

下面我已经复制了您的示例数据,然后将其返回并附加了 %。

DECLARE @t TABLE (Category varchar(10), [Period] varchar(4), [Type] varchar(20), Amount float)
INSERT INTO @t VALUES
('TTL_SALES', 'CURR', 'CLOTHES', 1234000),
('TTL_SALES', 'PRE', 'CLOTHES', 1355657),
('TTL_SALES', 'CURR', 'ACCESSORIES', 34000),
('TTL_SALES', 'PRE', 'ACCESSORIES', 36000),
('BG_SALES', 'CURR', 'CLOTHES', 550000),
('BG_SALES', 'PRE', 'CLOTHES', 575000),
('BG_SALES', 'CURR', 'ACCESSORIES', 12000),
('BG_SALES', 'PRE', 'ACCESSORIES', 9000)

SELECT * FROM @t
UNION ALL
SELECT 
    'BG_%' as Category
    , t.[Period]
    , t.[Type]
    , b.Amount/t.Amount
FROM (SELECT * FROM @t WHERE Category = 'TTL_SALES') t
    JOIN (SELECT * FROM @t WHERE Category = 'BG_SALES') b
        ON t.[Period] = b.[Period] and t.[Type] = b.[Type]

这给了我们以下结果

我将此查询用作报告中的数据集查询。 我添加了一个包含两个行组的矩阵,一个用于Type,一个用于Category 我为Periodd 添加了一个列组 我将 [data] 单元格设置为 Amount

我在类型组中添加了一个空白行并删除了所有不必要的列。

最后我颠倒了行组的排序顺序,所以结果符合预期。

最终的设计是这样的……

另一个快速变化.... 我将Amount 文本框的Format 属性设置为以下...

=IIF(Fields!Category.Value = "BG_%", "p2", "n0")

这会将 BG_% 行格式化为带有 2 位小数的百分比,并将任何其他行格式化为带有千位分隔符和零位小数的数字。

最终输出如下所示。

【讨论】:

  • 谢谢艾伦!!我试试这个
猜你喜欢
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2022-09-23
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多