This query is running successfully using Microsoft SQL Server Management Studio and I could not use it in PostgreSQL. I want a similar query to give the same result using PostgreSQL Note that: this will run on a table that contains 1 junior and 2 seniors. I want to use this query also if I have more juniors and seniors
DECLARE @Budget Int = 50000, @Seniors int = 0, @Juniors int = 0, @SeniorSalary int = 20000, @juniorSalary int = 10000 WHILE @Budget >= @juniorSalary BEGIN IF @Budget >= @SeniorSalary BEGIN SET @Budget = @Budget - @SeniorSalary; SET @Seniors = @Seniors + 1; END ELSE IF @Budget >= @juniorSalary BEGIN SET @Budget = @Budget - @juniorSalary; SET @Juniors = @Juniors + 1; END END SELECT @Seniors AS [Seniors], @Juniors as [Juniors], @Budget As [RemainingBudget]
Advertisement
Answer
Your first mistake is assuming something runs in SQL Server it will Postgres (or any other DBMS) all the flow from that one. Further it is not a query it is a script, and the structure for a psql script is completely different from a T-sql script. I suggest you spend considerable time studying a couple Postgres Tutorials such as command line tutorial and PostgreSQLTutorial and/or others or !gasp! old technology – a book.
I appreciate that sometimes a problem is one of concept, like expecting a T-Sql script to run in Postgres. Therefore, I offer the following as a one-time demonstration to point you in the right direction. It is a translation to Postgres of your script, certainly not the only and perhaps not the best.
I leave its description to your research.
create or replace function developer_budget ( budget integer , seniorsalary integer , juniorsalary integer ) returns table ( seniors integer , juniors integer , remaining integer ) language plpgsql as $$ declare seniors integer = 0; juniors integer = 0; begin while budget >= juniorsalary loop if budget >= seniorsalary then budget = budget - seniorsalary; seniors = seniors + 1; elsif budget >= juniorsalary then budget = budget - juniorsalary; juniors = juniors + 1; end if; end loop; return query select seniors,juniors, budget; end; $$; select seniors "Seniors" , juniors "Juniors" , remaining "Remaining bubjet" from developer_budget( Budget => 50000 , SeniorSalary => 20000 , JuniorSalary => 10000 );