在单列的基础上比较查询结果

时间:2015-09-16 14:14:19

标签: mysql sql

示例:

select c_id,'VIP Customer' [Customer Level] from customer where ...

联合

select c_id,'Regular Customer' [Customer Level] from customer where ...

如果c_id是第一级(VIP)的一部分,则不能是第二级(常规)。我正在使用Union它不工作,因为第二列数据不同。

有人可以建议吗?

5 个答案:

答案 0 :(得分:0)

我不确定您使用的是哪种SQL变体,但您可能会发现查看' case'表达式而不是联合,请参阅:

How do I perform an IF...THEN in an SQL SELECT?

答案 1 :(得分:0)

如果结果ID包含在第一个查询中,您可以检查。所以像这样:

SELECT c_id,'VIP Customer' [Customer Level] from customer where [CONDITION]
UNION
(select c_id,'Regular Customer' [Customer Level]
from customer where [SECOND_CONDITION] AND
c_id not in 
(SELECT c_id,'VIP Customer' [Customer Level] from customer where [CONDITION]))

答案 2 :(得分:0)

所以你变得像......

1,'VIP'

1,'常规'

如果是这样,我不确定where子句是否100%完成。如果它发现同一客户是多种类型,那可能是一个红旗。如果客户被保存为多个类型,那么case语句可能是在这种情况下而不是联合的方式。

select c_id, case when... then 'VIP' when... then 'Regular' end

答案 3 :(得分:0)

这是错误的客户端查询。

select A.RC_id
from (
      select c_id RC_id
      from customer
      where 'Regular Customer' criteria) A
inner join (
      select c_id VIP_id
      from customer
      where 'VIP Customer' criteria) B
on A.RC_id=B.VIP_id

或者你可以在客户端上应用这两个标准,我认为这是最短的解决方案

select c_id
from customer
where ('VIP Customer criteria' AND 'Regular Customer criteria')

答案 4 :(得分:0)

CASE似乎是一个不错的解决方案,如果需要,您还可以添加更多客户级别。

select c_id, [Customer Level] = 
    CASE
        WHEN ... THEN  'VIP Customer'
        ELSE 'Regular Customer'
    END

 from customer 

有关MSDN上的CASE的更多信息:https://msdn.microsoft.com/en-us/library/ms181765.aspx