-1

恐れ入りますが、次の問題についてご協力をお願いいたします。

私はこれを非常にシンプルにしています。言葉では説明しきれないので画像で。

テーブルサービス

PERSONID     Service_id          chargeamount
1               3                 20.50
2               4                 80.50
3               5                 78.80

テーブルチャージ

service_id     payed          extracharges
3               true              20.50
4               true              80.50
3               false             78.80

未払いの追加料金がある場合は true または false を示す必要があり、サービス ID が 2 番目のテーブルで一致しない場合は、null 値またはその他の計算値を使用してクエリに表示する必要があります。

このようなもの

PERSONID     Service_id          chargeamount                        payed
1               3                 20.50                              false
2               4                 80.50                              true
3               5                 78.80                              null

ただし、結合によって作成されたもののように、同じ行の余分な行は許可されていません。

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[SERVICES](
    [personid] [int] NULL,
    [service_id] [int] NULL,
    [chargeamount] [float] NULL
) ON [PRIMARY]

GO


insert into services (personid,service_id,chargeamount) values ( 1,3  ,20);
insert into services (personid,service_id,chargeamount) values ( 2,4  ,20);
insert into services (personid,service_id,chargeamount) values ( 3,5 ,20);



SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[charges](
    [payed] [bit] NULL,
    [service_id] [int] NULL,
    [extracharges] [float] NULL
) ON [PRIMARY]

GO

insert into services (service_id,payed,extracharges) values ( 3,true,20.50);
insert into services (service_id,payed,extracharges) values ( 3,false,78.80);
insert into services (service_id,payed,extracharges) values ( 4,false,80.50);
4

1 に答える 1

0

これは の単純な左結合service_idです。payed=が含まれる行が 1 つでもある場合はfalsefalseが表示されます。それ以外の場合はtrueまたはnullがそれぞれ表示されます。

select s.*, case min(c.payed) when 1 then 'true' when 0 then 'false' else 'null' end
from services s
left join charges c on c.service_id = s.service_id
group by s.personid, s.service_id, s.chargeamount

SQLフィドル

于 2013-01-24T19:02:56.913 に答える