【发布时间】:2018-12-03 06:53:06
【问题描述】:
我有一个表 (Mytable),其值如下所示;
CustNo Audit History Inputter Authoriser
1 CHANGE CURRENT XYZ XYZ
2 CHANGE BEFORE XYZ XYZ
2 CHANGE CURRENT TOM TOM
3 ADD NEW TOM TOM
如果 Inputter 和 Authoriser 的值为 'XYZ' 且 Audit = 'CHANGE' 和 History = 'CURRENT',我只需要过滤掉记录,但是对于 Inputter 和 Authoriser,它可以分别将 Audit 和 History 作为 CHANGE 和 BEFORE有值 'XYZ' 和其他记录
我的预期输出如下:
CustNo Audit History Inputter Authoriser
2 CHANGE BEFORE XYZ XYZ
2 CHANGE CURRENT TOM TOM
3 ADD NEW TOM TOM
我使用了以下但我没有得到我例外的东西;
select * from Mytable
where (Inputter != 'XYZ' and Authoriser != 'XYZ' and Audit != 'CHANGE' and History != 'CURRENT' )
有人可以纠正我,如何达到我的预期输出。提前致谢。
**请修改我的要求,以下是新的例外; **
现在我的现有需求中需要添加另一个场景, 下面是表格记录;
CustNo Audit History Inputter Authoriser
1 ADD NEW Sasha Sasha
1 CHANGE BEOFRE MAX MAX
1 CHANGE CURRENT XYZ XYZ
2 CHANGE BEFORE XYZ XYZ
2 CHANGE CURRENT TOM TOM
3 ADD NEW TOM TOM
3 CHANGE CURRENT MAX MAX
如果任何 Inputter 和 Authoriser 具有 'XYZ' 和 Audit 并且历史具有 'CHANGE' 和 'CURRENT',则应删除该记录(这是现有的工作)以及表中出现的任何相同custNo。
例如,这里custNo = 1 有'XYZ' 和'CHANGE' & 'CURRENT',
所以这应该与;
custNo = 1 与 'CHANGE' 和 'BEOFRE' 用于'MAX' 和custNo = 1 与'ADD' 和'NEW' 用于'Sasha'
换句话说 - 删除任何出现的相同 CustNo (在 Inputter 和 Authoriser 字段中都有 'XYZ',在 Audit 和 History 字段中分别有 'CHANGE' 和 'CURRENT')无论任何审计和历史记录如何,即使该客户在输入者和授权者字段中没有 'XYZ'。
新的预期输出:
CustNo Audit History Inputter Authoriser
2 CHANGE BEFORE XYZ XYZ
2 CHANGE CURRENT TOM TOM
3 ADD NEW TOM TOM
3 CHANGE CURRENT MAX MAX
【问题讨论】:
-
为什么在您的预期输出中有
CustNo = 3而不是CustNo = 1? -
这就是我需要过滤的内容,即
CustNo =1,因为CustNo =1的审计和历史记录分别为 CHANGE 和 CURRENT。换句话说,对于 Inputter 和 Authoriser 的任何审计和历史记录为 CHANGE 和 CURRENT 的 custNo 都不应报告,其他任何情况都应报告。 -
你的逻辑我不清楚,你需要更好地在这个网站上发布明确的问题。
标签: sql sql-server tsql sql-server-2008