SQL Server 2008报告:组的最大总和
发布时间:2020-05-30 08:36:12 所属栏目:MsSql 来源:互联网
导读:我在报表设计器中有这样的表格: Category: 1 2 3 4 TotalMax Amount: x y z c ? 我需要得到Max Amount的总和,但是表达式不允许我取Sum(Max(amount)),并且对此单元格禁用add total. 最大金额行是一个表达式,它取每个类别的最大值.源数据
|
我在报表设计器中有这样的表格: Category: 1 2 3 4 Total Max Amount: x y z c ? 我需要得到Max Amount的总和,但是表达式不允许我取Sum(Max(amount)),并且对此单元格禁用add total. 最大金额行是一个表达式,它取每个类别的最大值.源数据有重复的值,所以我只取最大值.例如: Category Amount
1 4.6
1 4.6
1 4.6
2 5
3 4
表中的其他列是不同的,但数量将是相同的,所以我不仅可以选择不同的值. 解决方法也许是这样的:SELECT
SUM(t1.maxAmout)
FROM
(
SELECT
MAX(t.Amout) AS maxAmout,t.Category
FROM
yourTable AS t
GROUP BY
t.Category
) AS t1
你也可以这样做.如果您使用的是sql server 2005: SELECT
pvt.[1],pvt.[2],pvt.[3],(
pvt.[1]+
pvt.[2]+
pvt.[3]
) AS Total
FROM
(
SELECT
t.Category,t.Amout
FROM
yourTable AS t
) AS SourceTable
PIVOT
(
MAX(Amout)
FOR Category IN([1],[2],[3])
) AS pvt
编辑 如果您有1000个类别.然后动态支点将是最佳解决方案.像这样: 测试数据 CREATE TABLE #T
(
Category INT,Amout FLOAT
)
INSERT INTO #T
VALUES
(1,4.6),(1,(2,5),(3,4)
唯一的列名称 DECLARE @cols VARCHAR(MAX)
DECLARE @colsTotal VARCHAR(MAX)
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY t.Category ORDER BY t.Amout) AS RowNbr,t.*
FROM
#T AS t
)
SELECT @cols = COALESCE(@cols + ','+QUOTENAME(Category),QUOTENAME(Category)),@colsTotal=COALESCE(@colsTotal + '+ISNULL('+QUOTENAME(Category)+',0)','ISNULL('+QUOTENAME(Category)+',0)')
FROM
CTE
WHERE
CTE.RowNbr=1
ORDER BY
Category
动态枢轴 DECLARE @query NVARCHAR(4000)=
N'SELECT
'+@cols+',(
'+@colsTotal+'
) AS Total
FROM
(
SELECT
t.Category,t.Amout
FROM
#T AS t
) AS SourceTable
PIVOT
(
MAX(Amout)
FOR Category IN('+@cols+')
) AS pvt'
EXECUTE(@query) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 如何在SQL中创建REPLACE PATTERN?
- 使用BULK INSERT大批量导入数据 SQLSERVER
- Centos7下无法远程连接mysql数据库的原因与解决
- .net – 无预览打印ServerReport
- sql server 查询一个表内的几个字段,导入另外一个表内
- sql-server-2008 – 如何在SQL Server 2008中的数据库上查找
- sql – 每组值的自定义SERIAL / autoincrement
- sql-server – 是否有理由手动更新统计信息?
- SQLSERVER 中GO的作用详解
- sql-server – Sql Server Service Broker:如何构建简单队
