我有一个关系数据库(我是新创建的),它有许多与棒球统计跟踪和分析相关的表格。我目前正在处理的表是tbl_PitchLog
表,用于跟踪蝙蝠中的音高。
我想要做的是消除对击球桌的需要,并且只为一组球场使用At-Bat Unique ID。我有一个Pitch_ID
字段,但是我希望SS生成一个新的AtBat_ID
,然后我可以参考这个字段来获取特定at-bat的所有音高。
例如
Pitch_ID | Pitch_Number | Result
1 1 Foul
2 2 Foul
3 3 Strike
4 1 Ball
5 2 Flyout
6 1 Groundout
成为:
Pitch_ID | AtBat_ID | Pitch_Number | Result
1 1 1 Foul
2 1 2 Foul
3 1 3 Strike
4 2 1 Ball
5 2 2 Flyout
6 3 1 Groundout
答案 0 :(得分:2)
您没有指定您正在使用的SS版本,但SQL Server 2012引入了序列;您可以创建一个at bat序列,在at bat更改时获取下一个值,并将该值用于插入。
CREATE SEQUENCE at_bat_seq
AS INTEGER
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE <what you want the max to be>
NO CYCLE;
DECLARE @at_bat int;
SET @at_bat = NEXT VALUE FOR at_bat_seq;
大多数限定词都是不言自明的; [NO] CYCLE指定值是否会在达到最大值时从最小值开始。如上所述,当你达到最大值时,你会收到一个错误。如果你只想让它在达到最大值时重新开始,那么指定CYCLE而不是NO CYCLE。
答案 1 :(得分:0)
使用tbl_PitchLog
作为主键创建Pitch_ID
表,同时从主表中获取外键。
您要找的是one to one relationship。