如果这对任何人来说都更容易,我为这个问题制作了一个SQL Fiddle。
我有一个各种各样的梦幻体育数据库,我想弄清楚如何得出“当前的连胜”数据(例如,如果球队赢得了最近的两场比赛,则为“W2”,如果他们输了则为“L1”他们赢得上一场比赛后的最后一场比赛 - 如果他们最近的比赛打平,则为“T1”)。
这是我的基本架构:
CREATE TABLE FantasyTeams (
team_id BIGINT NOT NULL
)
CREATE TABLE FantasyMatches(
match_id BIGINT NOT NULL,
home_fantasy_team_id BIGINT NOT NULL,
away_fantasy_team_id BIGINT NOT NULL,
fantasy_season_id BIGINT NOT NULL,
fantasy_league_id BIGINT NOT NULL,
fantasy_week_id BIGINT NOT NULL,
winning_team_id BIGINT NULL
)
Run Code Online (Sandbox Code Playgroud)
的值NULL
在winning_team_id
列指示该匹配领带。
这是一个示例 DML 语句,其中包含 6 支球队和 3 周比赛的一些示例数据:
INSERT INTO FantasyTeams
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6 …
Run Code Online (Sandbox Code Playgroud) 我了解 SQL Server 中的 PIVOT 功能,并且在这里阅读了一些其他问题和答案,但我似乎无法掌握它来完成我需要的操作。我正在尝试进行一些计算,结果如下:
TABLE office_settings
column office_id (bigint not null)
column setting_value (NVARCHAR(500) NOT NULL)
office_id setting_value
--------------------------------------------
4 0.2
4 0.2
4 2
4 3
5 0.2
5 0.2
5 2
5 3
Run Code Online (Sandbox Code Playgroud)
我想使用 PIVOT (假设这是适合该工作的工具)将其转换为这个,基本上是“按”office_id 列“分组”,所以:
office_id value_1 value_2 value_3 value_4
------------------------------------------------------
4 0.2 0.2 2 3
5 0.2 0.2 2 3
Run Code Online (Sandbox Code Playgroud)
我还应该提到,在此过程中我需要将setting_value 列值转换为DECIMAL(4,2) - 以防这对完成它所需的T-SQL 有任何影响。
有任何想法吗?