创建视图并对列值进行求和
Posted
技术标签:
【中文标题】创建视图并对列值进行求和【英文标题】:Create view and make SUM of column values 【发布时间】:2021-04-28 18:40:02 【问题描述】:我在 SQL Server 中有两个表(A 和 B)。我想在 NameA 上创建一个带有联合或溶解的视图,其中包含计数总和和几何形状。
结果应该是这样的:
nameC | ogr_geometry | SUM_count |
---|---|---|
main1 | GEOMETRY | 4 |
main2 | GEOMETRY | 2 |
main3 | GEOMETRY | 2 |
tableA
nameA | Count |
---|---|
main1 | 1 |
main1 | 1 |
main1 | 1 |
main1 | 1 |
main3 | 1 |
main3 | 1 |
main2 | 1 |
main2 | 1 |
表B
nameB | ogr_geometry |
---|---|
main1 | GEOMETRY |
main2 | GEOMETRY |
main3 | GEOMETRY |
我试过了:
CREATE or ALTER VIEW SUM_main
AS
SELECT
SUM(Count) AS SUM_count,
TableB.ogr_geometry
FROM
TableA
INNER JOIN
TableB ON TableA.nameA = TableB.nameB
GROUP BY
TableA.nameA
它不起作用。
有效,但没有几何或名称,但似乎做了 SUM:
CREATE or ALTER VIEW SUM_main
AS
SELECT SUM(Count) AS SUM_count
FROM TableA
INNER JOIN tableB ON tableA.nameA = tableB.nameB
GROUP by tableA.nameA
SUM_count | |
---|---|
1 | 4 |
2 | 2 |
3 | 2 |
如何获取名称和几何图形?
【问题讨论】:
“invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause”
有点告诉你问题
【参考方案1】:
SELECT
中的非聚合列必须是 GROUP BY
列的相同或子集。由于几何类型不可比较,它不能在GROUP BY
列之间。分两步完成
SELECT ta.*, TableB.ogr_geometry
FROM (
SELECT nameA, SUM(Count) AS SUM_count
FROM TableA
GROUP BY nameA ) ta
INNER JOIN tableB ON ta.nameA = tableB.nameB
【讨论】:
这给了我““几何”类型不可比较。它不能在 GROUP BY 子句中使用。” 提供 CREATE TABLE 以使数据类型对社区可见。请参阅编辑后的答案。【参考方案2】:需要对ogr_geometry
列应用聚合。由于它不是 GROUP BY 列之一,SQL 正试图以某种方式跨组聚合它。
如果ogr_geometry
具有可比性,那么您可以执行以下操作:
SELECT tableA.nameA
, SUM(count) AS count
, MIN(tableB.ogr_geometry) AS geometry
FROM tableA
INNER JOIN tableB ON tableA.nameA=tableB.nameB
GROUP by tableA.nameA
如果不是,因为ogr_geometry
实际上是几何类型,你需要先对tableA进行聚合,然后再与tableB进行join:
SELECT tableA.nameA
, tableB.ogr_geometry
, tableA.count
FROM (
SELECT nameA
, SUM(count) AS count
FROM tableA
GROUP BY nameA
) tableA
INNER JOIN tableB ON tableA.nameA=tableB.nameB
【讨论】:
这给了我“操作数数据类型几何对 min 运算符无效。” 查看更新的答案,从您的原始问题中不清楚您正在使用的类型,但应该这样做。以上是关于创建视图并对列值进行求和的主要内容,如果未能解决你的问题,请参考以下文章