【问题标题】:SQL Server, temporary table, SELECT statement not workingSQL Server,临时表,SELECT 语句不起作用
【发布时间】:2021-12-29 21:17:55
【问题描述】:

我正在尝试从我创建的临时表在 Azure Data Studio 中运行查询。但是,在我的 SELECT 语句中,它无法识别列名。 SELECT 语句中的列名(即FirstPlayer, SecondPlayer, Score)带有红色下划线,查询返回为无效。

知道如何更改语法以使其运行吗?

IF OBJECT_ID('tempdb.dbo.#GameScores','U') IS NOT NULL
    DROP TABLE #GameScores;
GO

CREATE TABLE #GameScores
(
    FirstPlayer  VARCHAR(10),
    SecondPlayer VARCHAR(10),
    Score        INTEGER
);
GO

INSERT INTO #GameScores 
VALUES ('Joe','Ryan', 120),
       ('Sue', 'Jackie', 200),
       ('Ryan', 'Sue', 50),
       ('Ryan', 'Joe', 100);
GO

SELECT DISTINCT 
    FirstPlayer,
    SecondPlayer, 
    IF(Score = MAX(Score), MAX(Score) + 20, Score) AS Score
FROM 
    #GameScores
WHERE 
    SecondPlayer NOT LIKE "JO%"
    OR Points <> 100

【问题讨论】:

  • 没有if,而是iif,但更重要的是你应该转换聚合函数信息window functions,类似于max(score) over (partition by FirstPlayer, SecondPlayer)
  • MAX(Score) 指的是什么,最大行数?

标签: sql sql-server azure-data-studio


【解决方案1】:

如果您在选择查询中有其他列,则需要使用 GROUP BY。

为了使您的查询正常工作,您必须先计算最大值(分数),然后将它们应用到 SELECT 查询中,如下所示。此外,您在表中没有积分列。我认为您指的是分数列。

DECLARE @max_Score INT = (SELECT max(score) from #GameScores)
SELECT 
    DISTINCT FirstPlayer,
    SecondPlayer, 
    CASE WHEN Score = @max_Score THEN @max_Score+20 ELSE Score END AS Score
FROM #GameScores
WHERE SecondPlayer NOT LIKE 'JO%'
OR Score <> 100
FirstPlayer SecondPlayer Score
Joe Ryan 120
Ryan Sue 50
Sue Jackie 220

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2019-09-22
    • 2010-12-28
    相关资源
    最近更新 更多