我有一个ROAD表,每行的每个顶点都有一行:
+---------+--------------+-------------+
| ROAD_ID | VERTEX_INDEX | MEASURE_VAL |
+---------+--------------+-------------+
| 1 | 1 | 0 |
| 1 | 2 | 1.2 |
| 1 | 3 | 2.8 |
| 1 | 4 | 4.0 |
| 1 | 5 | 4.3 |
| 1 | 6 | 6.7 |
| 1 | 7 | 7.1 |
+---------+--------------+-------------+
| 2 | 1 | 0 |
| 2 | 2 | 5.2 |
| 2 | 3 …Run Code Online (Sandbox Code Playgroud) 我不明白这个查询是如何工作的:
1 SELECT
2 EXTRACTVALUE(definition_xml.COLUMN_VALUE, 'SubtypeFieldInfo/DomainName') AS domain_name
3 FROM
4 SDE.GDB_ITEMS_VW i
5 JOIN SDE.GDB_ITEMTYPES it ON
6 i.Type = it.UUID
7 ,TABLE(XMLSEQUENCE(XMLType(Definition).Extract('/DETableInfo/Subtypes/Subtype/FieldInfos/SubtypeFieldInfo'))) definition_xml
Run Code Online (Sandbox Code Playgroud)
第 7 行开头的逗号有什么作用?
我的猜测是编写查询的人使用了某种 SQL 简写。也许如果有人可以帮助重新格式化“初学者 SQL”中的查询,它可能会有所帮助。
我想创建一个ID默认情况下自动生成唯一 ID 号的列。
用户不会通过INSERT语句插入行,而是使用开箱即用的应用程序(使用属性编辑环境)创建行。
我听说可以通过创建Oracle IDENTITY 列来实现自动生成的 ID
(提示:要在链接页面中查找相关部分,请搜索此文本:)Use this clause to specify an identity column.。
因此,我已成功创建了一个带有IDENTITY列的表:
CREATE TABLE A_TEST_TABLE (ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY);
Run Code Online (Sandbox Code Playgroud)
但是,我看到该字段不是 nullabe:
SELECT ID FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'A_TEST_TABLE'
NULLABLE = N
Run Code Online (Sandbox Code Playgroud)
这是一个问题,因为我的应用程序试图“帮用户一个忙”。如果字段不可为空,应用程序会自动插入一个零作为虚拟值。这会覆盖自动生成的 ID(这当然不是我想要的)。我猜测这样做是为了避免在提交空值时从数据库收到错误消息。
为了避免我的应用程序出现此问题,是否可以将字段设为 nullabe?
当我阅读文档时,它说:
如果您指定 ON NULL,那么当后续的 INSERT 语句尝试分配计算结果为 NULL 的值时,Oracle 数据库使用序列生成器为该列分配一个值。
这是否意味着IDENTITY字段可以为空?如果是这样,如何?
我承认我不知道自己在做什么。我什至不认为我最终会想要一个可以为空的 ID …
在《SQL 入门》一书中,Thomas Nield 谈到了一种他称之为“零/空情况技巧”的技术:
有一个简单但功能强大的工具,可以将不同的过滤条件应用于不同的聚合。我们可以在两个单独的列中创建龙卷风存在与不存在时的单独总计数:
Run Code Online (Sandbox Code Playgroud)SELECT year, month, SUM(CASE WHEN tornado = 1 THEN precipitation ELSE 0 END) as tornado_precipitation, SUM(CASE WHEN tornado = 0 THEN precipitation ELSE 0 END) as non_tornado_precipitation FROM station_data WHERE year >= 1990 GROUP BY year, month我们有效地做的就是当tornado = 1 或tornado = 0 时去掉WHERE 条件,然后将这些条件移至SUM() 函数内的CASE 表达式。如果满足条件,则将降水值添加到总和中。如果不是,则添加 0,但没有效果。我们对两列进行这些操作,分别针对龙卷风存在时和不存在龙卷风时进行。
您可以使 CASE 表达式具有所需数量的条件/值对,从而使您能够通过聚合对值进行高度特定的截取。您还可以使用此技巧来模拟交叉表和数据透视表,将聚合表示为单独的列而不是行。一个常见的示例是进行当年/上一年分析,因为您可以使用不同的列来表示不同的年份。
作为新手,该技术似乎对于总结数据非常有用。我想在线查找该技术以获取更多信息。
该书的作者将该技术称为“零/空案例技巧”。但当我用谷歌搜索这个词时,我没有得到很多结果。
问题:
该技术有一个普遍接受的名称吗?(在线搜索时会产生更多结果)
我有一个 SQL Server 2019 表,其中包含某些年份的行:
with data (year_, amount) as (
select 2024, 100 union all
select 2025, 200 union all
select 2025, 300 union all
select 2026, 400 union all
select 2027, 500 union all
select 2028, 600 union all
select 2028, 700 union all
select 2028, 800 union all
select 2029, 900 union all
select 2031, 100
)
select * from data
YEAR_ AMOUNT
---------- ----------
2024 100
2025 200
2025 300
2026 400
2027 500
2028 600 …Run Code Online (Sandbox Code Playgroud) 我想循环遍历用户定义数据类型(ESRI 版本)中 SHAPE/GEOMETRY 列中的顶点ST_GEOMETRY。我已在 GIS SE 帖子中发布了详细信息:Update sde.st_geometry M value tocumulative distance (geometric length)
我认为这通常会在存储过程中完成(可能与sde.ST_GEOMETRY函数ST_NumPointsand结合使用ST_PointN)。但是,我没有CREATE PROCEDURE权限,所以无法创建存储过程。
作为创建存储过程的替代方法,是否有一种方法可以使用 SQL 语句来循环遍历顶点?
Oracle 12c (12.1.0.2.0)
I have a projects table:
+------------+-----+
| PROJECT_ID | ... |
+------------+-----+
| LC000001 | |
| LC000002 | |
| LC000003 | |
| LC000004 | |
| LC000005 | |
+------------+-----+
Run Code Online (Sandbox Code Playgroud)
As you can see, the PROJECT_ID column has a text datatype (NVARCHAR2) and it has a prefix (LC).
I'm guessing that creating an ID with a prefix might have been a been a poor design choice. But, right or wrong, this is how …
我有一张road_age_test桌子:
create table road_age_test (
surface_year int,
base_year int
);
insert into road_age_test (surface_year, base_year) values (10,20);
insert into road_age_test (surface_year, base_year) values (30,null);
insert into road_age_test (surface_year, base_year) values (null,40);
insert into road_age_test (surface_year, base_year) values (null,null);
insert into road_age_test (surface_year, base_year) values (50,50);
commit;
select * from road_age_test;
SURFACE_YEAR BASE_YEAR
------------ ----------
10 20
30 null
null 40
null null
50 50
Run Code Online (Sandbox Code Playgroud)
我想从每一列中选择最大值,即使其中一个值为空:
GREATEST_YEAR
-------------
20
30
40
null
50
Run Code Online (Sandbox Code Playgroud)
什么是最简单的方法来做到这一点?
注意:如果两个值都是null,我想返回null, …
在 Oracle 21c 中,看起来我们可以以 JSON 文本形式返回结果集:
SELECT json_object(*)
from dual;
result:
{"DUMMY":"X"}
Run Code Online (Sandbox Code Playgroud)
这适用于db<>fiddle:
问题:
有没有办法使用漂亮的格式返回 JSON 文本?
{
"DUMMY":"X"
}
Run Code Online (Sandbox Code Playgroud)
我有一张road_insp桌子:
create table road_insp
(
insp_id int,
road_id int,
insp_year int,
condition number(10,2)
);
insert into road_insp (insp_id, road_id, insp_year, condition) values ( 1, 100, 2009, 5);
insert into road_insp (insp_id, road_id, insp_year, condition) values ( 2, 100, 2011, 3);
insert into road_insp (insp_id, road_id, insp_year, condition) values ( 3, 102, 2009, 9);
insert into road_insp (insp_id, road_id, insp_year, condition) values ( 4, 102, 2010, 7);
insert into road_insp (insp_id, road_id, insp_year, condition) values ( 5, 102, 2013, …Run Code Online (Sandbox Code Playgroud) 我有一个现有的ASSET_SUMMARY_VW观点:
+-----------------------+---------------+
| ASSET_TYPE | COST |
+-----------------------+---------------+
| TRANSPORTATION | 1,000,000,000 |
| TRANSPORTATION | 500,000,000 |
| TRANSPORTATION | 500,000,000 |
| ACTIVE TRANSPORTATION | 100,000,000 |
| ACTIVE TRANSPORTATION | 50,000,000 |
| STORMWATER MANAGEMENT | 500,000,000 |
+-----------------------+---------------+
Run Code Online (Sandbox Code Playgroud)
我想 GROUP BY 并计算每个ASSET_TYPE与总成本相比的百分比:
+-----------------------+---------------+------------------+
| ASSET_TYPE | COST | PERCENT_OF_TOTAL |
+-----------------------+---------------+------------------+
| TRANSPORTATION | 2,000,000,000 | 75.4 |
| ACTIVE TRANSPORTATION | 150,000,000 | 5.6 |
| STORMWATER MANAGEMENT | 500,000,000 | …Run Code Online (Sandbox Code Playgroud) performance oracle aggregate computed-column query-performance
oracle ×10
oracle-12c ×3
null ×2
select ×2
aggregate ×1
case ×1
identity ×1
join ×1
json ×1
oracle-19c ×1
oracle-21c ×1
performance ×1
pivot ×1
reporting ×1
spatial ×1
sql-server ×1
sum ×1
syntax ×1
terminology ×1
trigger ×1
update ×1
where ×1