2017-03-01 18 views
1

Microsoft SQL Server 2008.結果を1列に基づいて表示する結果

お詫び申し上げますよろしくお願い致します。彼らの基本料金が設定されている場合

私は人物を抽出するために作品をやっては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 
のラインに沿っています

基本的なレートだけが返されます(明らかな理由により)。

しかし、私はすべての賃金タイプを1人の従業員のもとにしたいと考えています。

希望はこれが理にかなっています!

+0

期待どおりの結果が得られましたか? – Wanderer

+0

その結果を示す表データを表示します。 – jarlh

+0

期待される結果は投稿のものですが、それはすべて本質的に同じですが、基本的な割合が0.00よりも高い従業員の数です – Jim

答えて

0

これはあなたが望むものだと思います。 基本料金がゼロの人のすべての料金を返します。彼はゼロの基本的な速度を有していないよう

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

すなわちジム・ビームを無視:データ

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'); 

それは以下の出力を生成するためのよう

--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) 

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

関連する問題