Skip to content Skip to sidebar Skip to footer

Creating A Calculated Column Based On The Flag - Tsql

I want to calculate the sum of the orders based on the flag. Sample table: +--------------+---------------+---------------+ | Order | Flag | Amount | +------

Solution 1:

Use a CASE statement inside the sum() function.

Sample data

declare@MyTabletable
(
    [Order] nvarchar(10),
    [Flag] nvarchar(3),
    [Amount] int
);

insertinto@MyTable ([Order], [Flag], [Amount]) values
('Order1', 'Yes', 500),
('Order1', 'Yes', 325),
('Order2', 'Yes', 799),
('Order2', 'No',  550),
('Order2', 'Yes', 675),
('Order3', 'No',  800);

Solution

select mt.[Order], mt.[Flag], mt.[Amount],
        SUM(AMOUNT) OVER (PARTITIONBY [ORDER]) AS'TOTAL_AMOUNT',
        SUM(casewhen [Flag]='Yes'then AMOUNT else0end) OVER (PARTITIONBY [ORDER]) AS'Yes_AMOUNT'from@MyTable mt;

Result

OrderFlagAmountTOTAL_AMOUNTYes_AMOUNT------------------------------------------------Order1Yes500825825Order1Yes325825825Order2Yes7992024         1474Order2No5502024         1474Order2Yes6752024         1474Order3No8008000

Post a Comment for "Creating A Calculated Column Based On The Flag - Tsql"