2013-01-24 20 views
-1

謙虛我要求下一個問題的幫助。sql服務器評估一行到多行不重複

我有這個很簡單。不知道如何用文字描述它,所以我會用圖像來做。

表服務

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 

如果有任何unpayed extracharge它必須證明真或假,如果服務ID不會在第二個表匹配它必須是在查詢中顯示空值或其他計算值

類似這樣的東西

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); 
+2

爲什麼'Service_id' 3評估下'payed'到'FALSE'? – Kermit

+0

我認爲這是一個錯誤,表中的第三行應顯示5,而不是3 –

+0

這是一對多關係,我打算評估是否有費用表中的未付款費用;否則結果集行將顯示爲false會說真實 – GoAntonio

回答

0

這是一個簡單的左連接service_id。當存在至少一行payed = false時,將顯示false。否則分別顯示truenull

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 

SQLFiddle

+0

不錯的嘗試朋友,但仍然有重複的行,如果我在表收費ID 3支付與真和另一個與假最終結果集顯示一行至極服務id支付是真實的,另一個假我希望你能幫助我。我非常感謝你的努力 – GoAntonio

+0

@GoAntonio我錯過了最後一部分。我希望,現在這是正確的。 –

+0

它說min不能應用於布爾數據類型case min(c.payed)或者你的意思是case min(c.extracharge)?我認爲這是不可能的,我從來沒有見過這樣的事情,我想實現你認爲它可能嗎? – GoAntonio