0

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

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”查询另一个表来检查用户是否是特权用户。可能会建议我在客户表中有一列来包含客户的“类型”。不幸的是,我无权修改表格。有什么想法可以以更短的延迟提取值吗?

4

2 回答 2

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'

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

于 2012-10-08T23:31:59.443 回答
0

你需要在这里做两件事:

  1. 加入您的第二张表,其中包含以下信息reg_mode

    SELECT * FROM customers JOIN reg_data ON customers.ID = reg_data.ID

    例如,请参阅JOIN 此处的详细信息

  2. 选择正确的值取决于reg_mode

    SELECT (CASE reg_mode WHEN "privileged" THEN customers.budget ELSE 0 END) 作为预算,...

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

于 2012-10-08T23:27:13.817 回答