【问题标题】:SQL Server 2008 query not executing properlySQL Server 2008 查询未正确执行
【发布时间】:2026-01-16 09:35:01
【问题描述】:

我必须在我的 SQL Server 2008 上运行此查询。

我需要加入 2 个表(Gasper_objectTicket)并获得同时显示 Gasper_object.id 的结果。

SELECT 
    TICKET.ACTION_CODE_KEY,
    TICKET.OBJECT_KEY,
    GASPER_OBJECT.ID, 
    CASE
        WHEN ACTION_CODE_KEY IN (4,8) THEN 'OUT OF SERVICE'
        WHEN ACTION_CODE_KEY IS NULL THEN 'IN SERVICE'
        ELSE 'FAULTY SERVICE' 
    END "STATUS"
FROM 
    TICKET
INNER JOIN 
    GASPER_OBJECT ON ticket.OBJECT_KEY = GASPER_OBJECT.OBJECT_KEY 
GROUP BY 
    ticket.object_key, GASPER_OBJECT.ID;

我该怎么办?

更新

这是我收到的一项任务

  • 如果 ACTION_CODE 为 4 或 8,则列名应该停止服务
    • 否则应该是错误的服务
    • 如果对象根本没有票,那么它就在服务中
    • GASPER_OBJECT.ID,状态应该是查询后的输出列
    • 如果对象有不止一张符合标准的票证,请使用不同的

【问题讨论】:

  • 有什么问题?
  • 您的查询在语法上不正确。请使用示例数据和所需结果编辑您的问题。
  • @GordonLinoff 为什么我看不到查询有什么问题..?能指点一下吗?
  • 语法没问题,但你的分组不一致。一般的 GROUP BY 规则是:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须要么标识一个分组列,要么是一个集合函数的参数。
  • ACTION_CODE_KEY 不在聚合或分组中

标签: sql sql-server database join


【解决方案1】:

只需将其余列添加到 group by。

SELECT 
    TICKET.ACTION_CODE_KEY,
    TICKET.OBJECT_KEY,
    GASPER_OBJECT.ID, 
    CASE
        WHEN ACTION_CODE_KEY IN (4,8) THEN 'OUT OF SERVICE'
        WHEN ACTION_CODE_KEY IS NULL THEN 'IN SERVICE'
        ELSE 'FAULTY SERVICE' 
    END "STATUS"
FROM 
    TICKET
INNER JOIN 
    GASPER_OBJECT ON ticket.OBJECT_KEY = GASPER_OBJECT.OBJECT_KEY 
GROUP BY 
    TICKET.ACTION_CODE_KEY, ticket.object_key, GASPER_OBJECT.ID;

【讨论】:

  • 再次感谢 :) 如果您能告诉如何使用 DISTINCT 来获得正确的结果,那将会很有帮助
  • 似乎是什么问题?数据重复?
  • gasper_object.id 和 ticket.object_key 重复了,先生
【解决方案2】:

在聚合查询中,所有不在group by 中的列都需要作为聚合函数的参数。这是一个至少应该运行的查询示例:

SELECT t.object_key, o.ID,
       (CASE WHEN MAX(ACTION_CODE_KEY)  IN (4, 8) THEN 'OUT OF SERVICE'
             WHEN MAX(ACTION_CODE_KEY) IS NULL THEN 'IN SERVICE'
             ELSE 'FAULTY SERVICE' 
        END) as STATUS
FROM TICKET t inner join
     GASPER_OBJECT o
     on t.OBJECT_KEY = o.OBJECT_KEY 
group by t.object_key, o.ID;

您的问题没有说明您想要做什么,因此这可能会也可能不会产生您期望的结果。

【讨论】: