Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7867133
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 3, 20262026-06-03T00:37:37+00:00 2026-06-03T00:37:37+00:00

I believe I can optimize this sql statement by using a case statement for

  • 0

I believe I can optimize this sql statement by using a case statement for the Left Outer Joins.

But I have been having hard time setting up the cases, one for summing up the code types AB,CD and another for All the rest.

Appreciate any help or tips you can give me on this.

update billing set payments = isnull(bd1.amount, payments)
, payments = case 
       when payments is null then 0 
       else payments 
     end
, charges = case 
        when bd2.amount is not null then charges 
        when charges is null then 0 
        else charges 
      end
, balance = round(charges + isnull(bd1.amount, bi.payments), 2) 
from billing bi 

left outer join (select inv, round(sum(bd1.bal), 2) amount 
                from "bill" bd1 
                where code_type = 'AB'
                 or code_type = 'CD' 
                group by inv) bd1 
                on bd1.inv = bi.inv 
left outer join (select invoice, round(sum(bd2.bal), 2) amount 
                from "bill" bd2 
                where code_type <> 'AB'
                 and code_type <> 'CD' 
                group by inv) bd2 
                on bd2.inv = bi.inv;
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-03T00:37:40+00:00Added an answer on June 3, 2026 at 12:37 am

    You can simplify it to this to use a single query rather than two. You still need the one because a GROUP BY in an UPDATE doesn’t work.

    UPDATE bi 
    SET    payments = bd.payments, 
           charges= bd.charges, 
           balance = bd.balance 
    FROM   billing bi 
           LEFT JOIN (SELECT bd.inv, 
                             payments = Round(Sum(CASE 
                                                    WHEN code_type IN ( 'AB' , 'CD' ) THEN 
                                                    bd.bal 
                                                    ELSE 0 
                                                  END), 2), 
                             charges = Round(Sum(CASE 
                                                   WHEN code_type NOT IN ( 'AB' , 'CD' ) THEN 
                                                   bd.bal 
                                                   ELSE 0 
                                                 END), 2), 
                             balance = Round(Sum(bd.bal), 2) 
                      FROM   bill bd 
                      GROUP  BY bd.inv) bd 
             ON bd.inv = bi.inv 
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I can't believe how unbelievably complicated this has been... I have the following XML...
I can't believe I can't work out how to do this but what can
I can't believe I'm still confused about this but, any way, lets finally nail
I have searched for this and can't believe I can't find it. Perhaps I've
I want to programatically enable TCP connections on SQL Server. I believe we can
I can't believe that the following statement seems to be still true So, I
I can't believe this - someone actually created two accounts on my social networking
I can't believe I'm back to this after working with WPF for 3 months
I have read and read related Q&A and can't believe that if my custom
This question sounds so easy I can't believe I can't find information on it

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.