我有一个跨越某些点的飞机飞行轨迹数据的数据库。我正在观察飞机穿过这些点的高度,并试图每隔100英尺将它们装箱。高度范围从大约2000英尺到15000英尺所以我想要一种方法来实现这一点,自动化100英尺的增量。所以我希望有一个交叉点,一个范围(比如2000-2100英尺)和计数。下一行是交叉点,下一个范围(2100-2200英尺)和计数,依此类推。
我仍然是一个SQL新手,所以任何帮助让我指向正确的方向将不胜感激。谢谢。
为了清晰而编辑 - 我什么都没有。我想要一个有我的穿越位置的列,另一个有高度范围,第三个有计数。我只是不确定是否对数据进行分类,因此它会以100英尺的增量给出范围。
答案 0 :(得分:1)
您可以使用AltitudeBucket的计算列。这是自动计算的。 (此技术通常用于将维度表加载到数据仓库中。)
在这种情况下,将AltitudeBucket作为计算列意味着您可以对其进行计算并在WHERE子句中使用它。
创建并填充表格。
CREATE TABLE dbo.TrackPoint
(
TrackPointID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
CrossingPoint nvarchar(50) NOT NULL,
AltitudeFeet int NOT NULL
CHECK (AltitudeFeet BETWEEN 1 AND 60000),
AltitudeBucket AS (AltitudeFeet / 100) * 100 PERSISTED NOT NULL
);
GO
INSERT INTO dbo.TrackPoint (CrossingPoint, AltitudeFeet)
VALUES
(N'Paris', 12772),
(N'Paris', 12765),
(N'Paris', 32123),
(N'Toulouse', 5123),
(N'Toulouse', 6123),
(N'Toulouse', 6120),
(N'Lyon', 15000),
(N'Lyon', 15010);
显示表格中的内容。
SELECT *
FROM dbo.TrackPoint;
运行SELECT查询以计算汇总计数。
SELECT CrossingPoint, AltitudeBucket, COUNT(*) AS 'Count'
FROM dbo.TrackPoint
GROUP BY CrossingPoint, AltitudeBucket
ORDER BY CrossingPoint, AltitudeBucket;
如果要显示海拔范围。
SELECT CrossingPoint, AltitudeBucket, CAST(AltitudeBucket AS nvarchar) + N'-' + CAST(AltitudeBucket + 99 AS nvarchar) AS 'AltitudeBucketRange', COUNT(*) AS 'Count'
FROM dbo.TrackPoint
GROUP BY CrossingPoint, AltitudeBucket
ORDER BY CrossingPoint, AltitudeBucket;
答案 1 :(得分:-1)
每当您尝试自动执行任何类型的流程时,首先必须为流程设计算法,以便成功执行手动。首先,选择此过程的最小部分:返回范围x和x + 100之间的高度计数。因此,当x = 2000时,您希望返回2000到2100之间的所有记录。
SELECT COUNT(*) FROM AltitudesTable
WHERE altitude >= 2000 AND altitude < 2100;
以上代码适用于一种情况:2000&lt; = x&lt; 2100。 要自动化,&#34;或者遍历所有情况,尝试使用T-SQL:
DECLARE @x INT = 2000;
WHILE EXISTS(SELECT * FROM AltitudesTable)
BEGIN
SELECT COUNT(*) FROM AltitudesTable
WHERE altitude >= @x AND altitude < @x+100;
@x = @x+100;
END
恭敬地,您的要求没有明确定义,所以我不得不对表结构和数据类型做出一些假设。