【问题标题】:Comparing row values from same table比较同一表中的行值
【发布时间】:2018-10-22 23:22:28
【问题描述】:

我正在尝试生成查询。 我需要下表中 TABLEOBJECTID 列中的值,其中 TABLENAME = 'EMPLOYEE' 和 INTERFACE MAINTAINED (CUSTFIELDNAME) = YES (CUSTFIELDVALUE) 和 传输标志 (CUSTFIELDNAME) = YES (CUSTFIELDVALUE) 任何帮助表示赞赏。下面显示的 SQL 不起作用并获取数据,但它也从其他字段获取值。

数据:

TABLEOBJECTID CUSTFIELDID TABLENAME CUSTFIELDNAME           CUSFIELDVALUE
2                    4    EMPLOYEE  INTERFACE MAINTAINED    No
2                    5    EMPLOYEE  TRANSFER HOURS TO AG    Yes
2                    7    EMPLOYEE  TRANSFER FLAG           Yes
3                    4    EMPLOYEE  INTERFACE MAINTAINED    Yes
3                    7    EMPLOYEE  TRANSFER FLAG           Yes
31                   4    EMPLOYEE  INTERFACE MAINTAINED    No
31                   5    EMPLOYEE  TRANSFER HOURS TO AG    No
31                   6    EMPLOYEE  DEFAULT JOB CODE    
94                   4    EMPLOYEE  INTERFACE MAINTAINED    No
94                   6    EMPLOYEE  DEFAULT JOB CODE        0325
94                   7    EMPLOYEE  TRANSFER FLAG           No
96                   4    EMPLOYEE  INTERFACE MAINTAINED    No
96                   6    EMPLOYEE  DEFAULT JOB CODE        0325
100                  4    EMPLOYEE  INTERFACE MAINTAINED    No
100                  5    EMPLOYEE  TRANSFER HOURS TO AG    No
100                  6    EMPLOYEE  DEFAULT JOB CODE    
100                  7    EMPLOYEE  TRANSFER FLAG           No
101                  4    EMPLOYEE  INTERFACE MAINTAINED    Yes
101                  6    EMPLOYEE  DEFAULT CODE            9760
101                  7    EMPLOYEE  TRANSFER FLAG           Yes

预期结果:

TABLEOBJECTID CUSTFIELDID TABLENAME CUSTFIELDNAME           CUSFIELDVALUE
3                    4    EMPLOYEE  INTERFACE MAINTAINED    Yes
3                    7    EMPLOYEE  TRANSFER FLAG           Yes
101                  4    EMPLOYEE  INTERFACE MAINTAINED    Yes   
101                  7    EMPLOYEE  TRANSFER FLAG           Yes

我一直在尝试这个脚本,但它也带来了其他 CUSTFIELDNAME 的结果:

select CWA.TABLEOBJECTID ,CWA.CUSTFIELDID ,CWA.CUSTFIELDNAME ,CWA.CUSTFIELDVALUE ,CWA.TABLENAME ,CWA.TABLEOBJECTID  from az.CWCUSTFIELD CWA 
    inner join  az.CWCUSTFIELD CWB on CWA.TABLEOBJECTID  =CWB.TABLEOBJECTID  and CWA.CUSTFIELDID <> CWB.CUSTFIELDID 
    where  CWA.tablename = 'EMPLOYEE' and CWB.TABLENAME ='EMPLOYEE' and (CWA.CUSTFIELDVALUE = 'YES' and CWB.CUSTFIELDVALUE = 'YES')

【问题讨论】:

  • 没有足够的信息来回答这个问题。 'TABLEOBJECTID' 是您发布的数据中的重复值,是否存在唯一标识每条记录的列?

标签: sql sql-server database syntax


【解决方案1】:

您错过了 CUSTFIELDID 上的过滤器,因为您只查找 INTERFACE MAINTAINED (4) 和 TRANSFER FLAG(7),因此您应该在此字段上为这两个表添加过滤器。

AND CWA.CUSTFIELDID(4,7) AND CWB.CUSTFIELDID(4,7)

或者您可以在 CUSTFIELDNAME 而不是 CUSTFIELDID 上应用过滤器,例如

AND CWA.CUSTFIELDNAME IN ('INTERFACE MAINTAINED', 'TRANSFER FLAG')
   AND CWB.CUSTFIELDNAME IN ('INTERFACE MAINTAINED', 'TRANSFER FLAG')

最终查询 -

select CWA.TABLEOBJECTID ,
  CWA.CUSTFIELDID ,
  CWA.CUSTFIELDNAME ,
  CWA.CUSTFIELDVALUE ,
  CWA.TABLENAME ,
  CWA.TABLEOBJECTID  
from az.CWCUSTFIELD CWA 
inner join  az.CWCUSTFIELD CWB on CWA.TABLEOBJECTID  =CWB.TABLEOBJECTID  
            and CWA.CUSTFIELDID <> CWB.CUSTFIELDID 
where  CWA.tablename = 'EMPLOYEE' 
  and CWB.TABLENAME ='EMPLOYEE' 
  and CWA.CUSTFIELDVALUE = 'YES' 
  and CWB.CUSTFIELDVALUE = 'YES'
  and CWA.CUSTFIELDNAME IN ('INTERFACE MAINTAINED', 'TRANSFER FLAG')
  and CWB.CUSTFIELDNAME IN ('INTERFACE MAINTAINED', 'TRANSFER FLAG')

【讨论】:

  • 您好 Vinit,感谢您的回复。您的建议的唯一问题是我不知道或不想硬编码值 4,7。因为一旦我在其他系统中部署它,它很可能有不同的 ID。 CWA.CUSTFIELDID(4,7) 和 CWB.CUSTFIELDID(4,7)
  • 然后您可以在 CUSTFIELDNAME 上应用过滤器,例如 AND CWA.CUSTFIELDNAME IN ('INTERFACE MAINTAINED', 'TRANSFER FLAG') AND CWB.CUSTFIELDNAME IN ('INTERFACE MAINTAINED', 'TRANSFER FLAG')
  • 你的真棒....它就像魅力一样。我一直想知道如何获得这样的技能。反正。非常感谢
猜你喜欢
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多