计算组结果并将其与详细信息合并
Posted
技术标签:
【中文标题】计算组结果并将其与详细信息合并【英文标题】:Calculate group result and merge it with details 【发布时间】:2018-02-06 07:03:58 【问题描述】:请考虑这个结果(报告):
State Value1 Value2 Value3
---------------------------------------------
State1 103 23% 3
State2 105 32% 12
State3 150 2% 23
Group1 120 19% 3
===================
State4 200 40% 5
State5 250 2% 12
Group2 225 21% 8
===================
...
我有组,每个组都包含一些状态。不,我想对我的详细信息数据运行查询并在每个组上运行一些自定义函数以获得Value1
到Value3
。为简单起见,请考虑 AVG
函数。
我正在使用Group By
子句生成状态结果,但是如何将状态组与我的结果合并?
谢谢
编辑 1)
这是基本数据,可能与上面的输出不匹配:
Id StateName Value1 Value2 Value3
1 State1 1 2 3
2 State2 4 2 2
3 State2 3 3 8
4 State2 3 8 5
...
编辑 2)
例如:
State1, State2, State3 Belong to `Group1`
State4, state5 Belong to `Group2`
...
【问题讨论】:
请提供示例数据(DDL)。 这个输入你需要什么输出? 你当前的 T-SQL 语句是什么? 你如何应用组,在哪一列? @PawanKumar 我已经提到了上面的输出(第一个代码块) 【参考方案1】:我认为您正在查看以下内容,我已使用 ROLLUP 函数来实现功能。
DECLARE @tblStates AS Table
(
GroupName VARCHAR(10),
StateName VARCHAR(50),
Value1 INT,
Value2 INT,
Value3 INT
)
INSERT INTO @tblStates VALUES('Group1','State1',103,23,3)
INSERT INTO @tblStates VALUES('Group1','State2',105,32,12)
INSERT INTO @tblStates VALUES('Group1','State3',150,2,23)
INSERT INTO @tblStates VALUES('Group2','State3',50,10,8)
INSERT INTO @tblStates VALUES('Group2','State4',80,22,1)
INSERT INTO @tblStates VALUES('Group2','State5',20,18,45)
;WITH T as
(
SELECT
GroupName,
StateName,
AVG(Value1) AS Value1,
AVG(Value2) AS Value2,
MIN(Value3) AS Value3
FROM @tblStates
GROUP BY ROLLUP(GroupName,StateName)
)
SELECT
CASE ISNULL(StateName,'') WHEN '' THEN GroupName ELSE StateName END AS StateName,
Value1,
Value2,
Value3
FROM T
WHERE
T.GroupName IS NOT NULL
ORDER BY GroupName
输出:
【讨论】:
【参考方案2】:我猜你正在寻找GROUPING SETS。此功能允许您在一个语句中执行聚合,按同一 GROUP BY
子句中的不同值分组。
所以,我猜你需要这样的东西(首先将你的数据添加到它所属的组):
Id StateName Value1 Value2 Value3 Group
1 State1 1 2 3 Group01
2 State2 4 2 2 Group01
3 State2 3 3 8 Group01
4 State4 3 8 5 Group02
...
然后,您将拥有:
SELECT ISNULL([Group],[StateName])
,AVG()
FROM ...
GROUP BY GROUPING SETS
(
([Group])
,([Group], [StateName])
);
【讨论】:
以上是关于计算组结果并将其与详细信息合并的主要内容,如果未能解决你的问题,请参考以下文章
如何在单个 gremlin 查询中将两个顶点详细信息和边属性详细信息合并在一起