2017-03-01 161 views
1

Microsoft SQL Server 2008.根据一列结果显示结果

道歉不确定最好的方式来说出这个,希望你会得到的主旨!

我做了一块,提取一个人的工资率时,他们的基本税率设定为0.00

例子:

Name | Wage Type | Amount 
--------+------------+------- 
JSmith | Basic  | 0.00 
JSmith | Overtime | 10.00 
JSmith | Sickness | 10.00 

当前的代码我已经是沿着

select 
    w.forenames, w.surname, ty.description, r.amount 
from 
    rolesAndRates r 
left join 
    workers w on r.owner = w.person 
left join 
    rateTypes ty on r.rate = ty.id 
where 
    ty.description = 'basic rate' 
    and amount = 0.00 
线

这导致返回基本费率(出于显而易见的原因)。

但是我希望拥有一名员工的所有工资类型。

希望这是有道理的!

+0

您的预期成果是什么? – Wanderer

+0

向我们展示给出结果的表格数据。 – jarlh

+0

预期的结果是帖子的表格,它所有来自的基本上是相同的,但一些雇员的一些谁将有一个基本利率> 0.00 – Jim

回答

0

我想/希望这是你想要的。 返回基础费率为零的人的所有费用。

--use CTE to find people with basic of 0.00 
with peopleWithZeroBasic as (
    select w.person 
    from #rolesAndRates r 
    left join #workers w on r.owner=w.person 
    left join #rateTypes ty on r.rate=ty.id 
    where ty.description='basic' and amount=0.00 
) 

select w.forenames, w.surname, ty.description,r.amount 
from #rolesAndRates r 
left join #workers w on r.owner=w.person 
left join #rateTypes ty on r.rate=ty.id 
where w.person in (select person from peopleWithZeroBasic) 

所以对于数据

create table #rolesAndRates ( rate int, amount decimal, owner varchar(20)) 
create table #workers (forenames varchar(max), surname varchar(max), person varchar(20)) 
create table #rateTypes (id int, description varchar(max)) 

insert into #rateTypes (id, description) values (1,'basic') 
insert into #rateTypes (id, description) values (2,'overtime') 
insert into #rateTypes (id, description) values (3,'sickness') 

insert into #workers (forenames, surname, person) values ('john', 'smith', 'jsmith') 
insert into #workers (forenames, surname, person) values ('jim', 'beam', 'jbeam') 

insert into #rolesAndRates (rate, amount, owner) values (1,0.00,'jsmith') 
insert into #rolesAndRates (rate, amount, owner) values (2,10.00,'jsmith') 
insert into #rolesAndRates (rate, amount, owner) values (3,5.00,'jsmith') 

insert into #rolesAndRates (rate, amount, owner) values (1,7.00,'jbeam') 
insert into #rolesAndRates (rate, amount, owner) values (2,10.00,'jbeam') 
insert into #rolesAndRates (rate, amount, owner) values (3,5.00,'jbeam'); 

它产生以下输出:

forenames surname description amount 
john smith basic 0 
john smith overtime 10 
john smith sickness 5 

即忽略吉姆束,因为他不具有零的基本速率。

0

我想你想inexists

select w.forenames, w.surname, rt.description, rr.amount 
from rolesAndRates rr join 
    workers w 
    on rr.owner = w.person join 
    rateTypes rt 
    on rr.rate = rt.id 
where exists (select 1 
       from rolesAndRates rr2 join 
        rateTypes rt2 
        on rr2.rate = rt2.id 
       where rt.description = 'basic rate' and 
        rr.amount = 0.00 and 
        rr2.owner = rr.owner 
      ); 
0

这是很难拿出确切的语法,你有没有在问题中提到人lthe表。但是这样的事情就是你需要的。

select w.forenames, w.surname, ty.description,r.amount 
from rolesAndRates r left join 
    workers w 
    on r.owner=w.person left join 
    rateTypes ty 
    on r.rate=ty.id 
where 
w.<name column> in (select <name column> from rateTypes where 
description='basic rate' and amount=0.00) 
+0

谢谢大家到目前为止..我可能不那么清楚在我的详细信息,我希望在基本利率为0.00时显示所有工资类型 – Jim