【发布时间】:2019-08-16 11:40:48
【问题描述】:
我希望在一系列游戏中为所有玩家计算 Ascending Points Diff。我希望第一列名称 PD1 具有最少的点差,PD2 次之,依此类推。我希望使用一个变量来执行此操作,该变量仅根据游戏数量将整数添加到“PD”的末尾。当我将 AS @ColumnName 添加到计算的末尾时,我不断收到错误。
USE [Rugby Pools]
DECLARE @counter int
DECLARE @MaxPlayer int
DECLARE @ColumnName varchar(50)
SET @counter = (SELECT MIN([Player_ID]) FROM [dbo].[Players])
SET @MaxPlayer = (SELECT MAX([Player_ID]) FROM [dbo].[Players])
DECLARE @gamecounter int
DECLARE @MaxGame int
SET @gamecounter = (SELECT MIN([Game_ID]) FROM [dbo].[Match])
SET @MaxGame = (SELECT MAX([Game_ID]) FROM [dbo].[Match])
SET @ColumnName='PD'+@gamecounter
WHILE @gamecounter <= @MaxGame
BEGIN
WHILE @counter <= @MaxPlayer
BEGIN
SELECT TOP (@gamecounter) dbo.Players.Player_ID, dbo.Entries.Game_ID, ABS(ABS(dbo.Entries.Home_Score-dbo.Entries.Away_Score)-(dbo.Match.Home_Score-dbo.Match.Away_Score)) AS @ColumnName
FROM Entries INNER JOIN
Match ON Entries.Game_ID = Match.Game_ID INNER JOIN
Players ON Entries.Player_ID = Players.Player_ID
WHERE dbo.Match.Home_Score IS NOT NULL AND dbo.Players.Player_ID=@counter
ORDER BY Players.Player_ID, PointsDiff1 ASC
SET @Counter += 1
END
SET @gamecounter += 1
END
一旦工作,我将能够对其进行更改以更新表格,这将允许我提供由获胜决定的球员联赛表格,然后是比赛过程中的最佳分差。
【问题讨论】:
-
你不能使用变量作为对象名称..(列和表)你需要 dinamyc sql
-
您使用的是哪个 dbms? (上面的代码是非常具体的产品。)
-
动态 SQL 可用于实现跳舞的列名,但通常使用数据的代码不会从不断变化的列名中受益。为什么你认为这会简化事情?也许有更好的方法来解决更大的问题。
标签: sql-server tsql variables columnname