2016-12-16 81 views
0

我想根据一个条件找出最高客户 - 无论他们是表中的memo列的直接用户。如果备忘录包含文字如PAYROLL,PAYRLL,SALARYtransaction_type = 'Credit',则它们被视为最大客户。因此,我写下面的查询:SQL通配符选择

SELECT user_id, 
    CASE WHEN transaction_type = 'Credit' AND 
       (memo LIKE '%PAYROLL%' OR memo LIKE '%PAYRLL%' OR memo LIKE '%SALARY%') 
      THEN 1 ELSE 0 END AS TOP_USERS 
FROM transaction 

但是,我看到一个人应该是1,但仍然计为0在这一列。 我的外卡有什么问题吗? 我正在使用PostgreSQL pgadmin3

+0

我没有看到任何明显的通配符错误,但是我只能从给出的信息中说出这些。如果我们知道TRANSACTION_TYPE和MEMO的值与预期应该匹配但不是 –

+0

@MarkAdelsberger这个计为0的人在备忘录下的transaction_type和'AMERICAN AIRLINE PAYRLL DEP'记录中具有'Credit'的记录可能有帮助 – YOBOX

+0

'transaction_type'字段是否允许多余的空格?也许那个没有计算的实际上是“信用”? – elmer007

回答

0

根据你的评论,“在transaction_type下有'Credit'的记录和在备忘录下的'AMERICAN AIRLINE PAYRLL DEP'是那些相同的记录? 'AMERICAN AIRLINE PAYRLL DEP'是否在类型为'Credit'的相同记录中显示在备忘录中?还是他们是单独的记录?如果他们单独更改AND和OR将解决它。

+0

您好,我们需要满足两个条件而不是一个。 – YOBOX

+0

我知道你需要同时满足。由于您的通配符似乎是正确的,因此我们会留下找出该人没有被您的查询返回的原因。两种最可能的解释是,尽管该人的记录符合每项标准,但他们没有任何记录符合两者,或者transaction_type中的“Credit”与查询中的“Credit”不同。因此,关于空白和大写的评论。 – WhatEva