Sql 以不同的结果显示同一列两次

Sql 以不同的结果显示同一列两次,sql,sql-server,Sql,Sql Server,我有一个列,其中包含由事件id关联的启用和禁用值。在此事件表中,我有用户datatime,我想创建一个查询,并在同一行中显示已启用事件的触发时间。触发禁用的时间 选择 阀门,阀门,凸轮, 能力减退,能力减退 从…起 {oj aspersao.dbo.events events LEFT JOIN aspersao.dbo.valv valv ON events.valv_id=valv.id LEFT JOIN aspersao.dbo.cod cod cod ON events.cod_id

我有一个列,其中包含由事件id关联的启用和禁用值。在此事件表中,我有用户datatime,我想创建一个查询,并在同一行中显示已启用事件的触发时间。触发禁用的时间

选择 阀门,阀门,凸轮, 能力减退,能力减退 从…起 {oj aspersao.dbo.events events LEFT JOIN aspersao.dbo.valv valv ON events.valv_id=valv.id LEFT JOIN aspersao.dbo.cod cod cod ON events.cod_id=cod.id} 哪里 阀凸轮='1' 和 Habilita=‘Habilitou瓣膜’ 和
Desabilita='Desabilitou valvula'即使在更正了代码之后,您也不会试图在WHERE子句中通过别名引用列,您的代码是无意义的。没有一行的列将等于两个不同的值

可能你想在桌子上拉两次。我还将去掉ODBC特定的花括号语法

SELECT
    valv.valvOf, valv.cam,
    cod1.descOf AS Habilita, cod2.descof AS Desabilita
FROM
    aspersao.dbo.events AS events 
    LEFT JOIN aspersao.dbo.valv AS valv ON events.valv_id = valv."id"
    LEFT JOIN aspersao.dbo.cod AS cod1 
         ON events.cod_id = cod1.id     
         AND cod1.descOf = 'Habilitou valvula'
    LEFT JOIN aspersao.dbo.cod AS cod2
         ON events.cod_id = cod2.id     
         AND cod2.descOf = 'Desabilitou valvula'
WHERE
    valv.cam = '1'
这几乎是一个猜测,因为你的问题中确实没有足够的信息


编辑:我在cod2.descOf=行中有错误的测试字符串;我已经解决了这个问题。

您不能在where子句中引用输出别名。请进一步查看表别名。valv.descOf='X'和cod.descOf='Y'问题是它不起作用,因为我给同一列分配了两个约束是的,我知道,但我想要一些类似的东西,您有同一个表的副本,需要给它们一个别名,以便您可以单独引用它们。@Piotr这是非标准外部联接时代的ODBC联接语法。虽然我怀疑它的必要性,但它仍然有效。谢谢,你的代码有效,只需对我的应用程序进行一些调整