0

注文した電話の少なくとも60%が受信されたレコードのみを表示するように、データベースにクエリを実行しようとしています。

これが私のテーブルの簡略版です:

dealID | Ordered | Received | precreditEL    | cancelled  | precredit
1      | 5       | 4        |                |            |
2      | 2       | 2        |                |            |
3      | 10      | 2        |                |            |
4      | 8       | 8        | Non-applicable |            |
5      | 6       | 5        | Non-applicable | Cancelled  | Ready

これが私の現在のクエリです

select deals.dealID,customer_info.accName,account_info.accessid,account_info.access_password,customer_info.contactNumber,deals.est_bill,deals.precreditAssigned,deals.precreditEL,deals.precredit
from customer_info join deals
left join account_info  on account_info.custID = customer_info.custID
left join phone_details on phone_details.dealID = deals.dealID 
where customer_info.custID = deals.custID
and deals.precreditEL <> 'Non-applicable'
and deals.precredit <> 'Complete'
and deals.cancelled IS NULL
GROUP BY deals.dealID
having ((100 - (((sum(phone_details.ordered) - sum(phone_details.received)) / sum(phone_details.ordered)) * 100)) >= 60)

これは完全に機能します。precreditELクエリは、該当なしでキャンセル済みとしてマークされていない限り、注文の60%が受信されたレコードを表示します。したがって、私の結果はになりますdealID 1 and 2

しかし、ここで、この条件をバイパスする別の条件を追加する必要があります。precreditがマークされている場合Ready、結果は上記の条件に関係なくレコードを表示します。だから私の結果は表示されますdealID 1, 2 and 5

どんな助けでもいただければ幸いです。どうもありがとうございます。

4

1 に答える 1

0

気にしないで 変えて手に入れた

having ((100 - (((sum(phone_details.ordered) - sum(phone_details.received)) / sum(phone_details.ordered)) * 100)) >= 60)

having (((100 - (((sum(phone_details.ordered) - sum(phone_details.received)) / sum(phone_details.ordered)) * 100)) >= 60) OR deals.precredit ='Ready')
于 2013-03-15T04:17:11.413 に答える