根据列值更改sql查询输出

时间:2012-10-08 23:16:46

标签: sql

我在表中有两种类型的客户,即特权用户和普通用户。当我从customers表中选择一些列值时,我想要普通用户的默认值,而我需要特权用户的实际值。 查询:

select name,id,budget,employees,duration from customers
where reg_date >= to_date( '01-SEP-2012','dd-mmm-yyyy') 
  and reg_date <= to_date('01-OCT-2012','dd-mmm-yyyy')

对于普通用户,我需要预算,员工,持续时间列的值为0。

我必须通过'id'和'reg_mode'查询另一个表来检查用户是否是特权用户。我可能会被告知我应该在customers表中有一列包含客户的“类型”。不幸的是,我无权修改表格。是否有任何想法以更短的延迟来提升价值?

2 个答案:

答案 0 :(得分:1)

不确定我是否得到它,特别是因为表结构不那么清楚...... 让我们假设其他表名是user_type。我想你想要的是(注意我的查询可能有小错误,因为我没有尝试,我只是想了解结构):

select name,id, '0' as budget, '0' as employees, '0' as duration from customers 
inner join user_type on
       customers.id = user_type.id
where reg_date >= to_date( '01-SEP-2012','dd-mmm-yyyy')  
  and reg_date <= to_date('01-OCT-2012','dd-mmm-yyyy') 
  and user_type.reg_mode = 'normal'

union

select name,id, budget, employees, as duration from customers 
inner join user_type on
       customers.id = user_type.id
where reg_date >= to_date( '01-SEP-2012','dd-mmm-yyyy')  
  and reg_date <= to_date('01-OCT-2012','dd-mmm-yyyy') 
  and user_type.reg_mode = 'privileged'

内部联接类似于哪里,如果您对该术语有疑问,请告诉我......

答案 1 :(得分:0)

你需要在这里做两件事:

  1. 加入您的第二个表格,其中包含reg_mode的信息:

    SELECT * 来自客户JOIN reg_data ON customers.ID = reg_data.ID

    有关JOIN here的详情,请参阅

  2. 根据reg_mode选择正确的值:

    SELECT(CASE reg_mode WHEN“特权”,那么customers.budget ELSE 0 END)作为预算, ...

    有关SQL Server的详细信息,请参阅CASE here。对于其他数据库,它应该或多或少相同