Как получить следующий вывод в SQL Server 2008? - PullRequest
0 голосов
/ 23 января 2020
SELECT A.Name AS ArlnName
    ,RD.RD_Slab
    ,IsNull(RD.RD_Publ_Rate, 0) AS RD_Publ_Rate
FROM RateHead RH
LEFT OUTER JOIN RateDetl RD ON RH.RH_LocCode = RD.RD_LocCode
    AND RH.RH_DocNo = RD.RD_DocNo
INNER JOIN AirlineMast A ON RH.RH_Airline = A.Code
INNER JOIN AirlineLocation AL ON RH.RH_LocCode = AL.LocCode
    AND RH.RH_Airline = AL.Code
    AND IsNull(AL.RatesAvailable, '') = 'Y'
LEFT OUTER JOIN CommodityMast CM ON CM.Code = RH.RH_SubCommodity
WHERE 1 = 1
    AND RH.RH_LocCode = 'BOM'
    AND IsNull(AL.RatesAvailable, '') = 'Y'
    AND RH.RH_DocNo IN (
        21038
        ,20708
        ,19886
        ,7876
        ,21146
        ,21009
        ,21121
        ,20921
        ,21195
        ,21210
        ,20925
        ,21182
        ,21143
        ,21191
        ,20857
        ,21082
        ,20481
        ,20533
        ,20314
        ,20387
        ,21173
        ,21198
        ,20635
        ,20657
        ,20099
        ,21192
        ,20928
        ,20590
        ,21066
        ,20862
        ,20985
        ,21128
        ,20897
        ,21211
        )
    AND RD.RD_Destn IN ('DXB')
ORDER BY RH.RH_WEF DESC
    ,RH.RH_DocNo DESC

Каким-то образом я получил этот вывод, используя приведенный выше запрос.

   AirLineName         Slab(Value)  Public_Rate
------------------------------------------------
    Aeroflot Cargo      -45.00      263.00
    Aeroflot Cargo      45.00       219.00
    Aeroflot Cargo      100.00      184.00
    Aeroflot Cargo      300.00      176.00
    Aeroflot Cargo      500.00      150.00
    Aeroflot Cargo      1000.00     130.00

    Air Arabia Cargo    -45.00      140.00
    Air Arabia Cargo    45.00       130.00
    Air Arabia Cargo    100.00      95.00
    Air Arabia Cargo    250.00      85.00
    Air Arabia Cargo    500.00      70.00

После этого я хочу выводить это так. Здесь (если значение плиты равно минус, тогда оно придет на имя обычного столбца (значение Public_Rate), а если плита на плюс, то выберет значение из Public_Rate и перейдет в другую категорию, например +20 +45 +100 +250 +300 + 500 +1000 зависит от значения столбца Public_Rate ...)

AirLineName         Normal    +20   +45   +100    +250   +300   +500  +1000   
----------------------------------------------------------------------------------
Aeroflot Cargo      263.00          219    184            176    150   130

Air Arabia Cargo    140             130     95      85            70    

Я не имею ни малейшего представления или Logi c, как написать этот запрос .... Спасибо !!

1 Ответ

1 голос
/ 23 января 2020

Вы можете попробовать это ниже logi c, учитывая ваш вывод в качестве входных данных-

ДЕМО ЗДЕСЬ

SELECT AirLineName,
SUM(CASE WHEN Slab_Value = -45 THEN Public_Rate ELSE 0 END) 'Normal',
SUM(CASE WHEN Slab_Value>= 20 AND Slab_Value < 45 THEN Public_Rate ELSE 0 END) '+20',
SUM(CASE WHEN Slab_Value>= 45 AND Slab_Value < 100 THEN Public_Rate ELSE 0 END) '+45',
SUM(CASE WHEN Slab_Value>= 100 AND Slab_Value < 250 THEN Public_Rate ELSE 0 END) '+100',
SUM(CASE WHEN Slab_Value>= 250 AND Slab_Value < 300 THEN Public_Rate ELSE 0 END) '+250',
SUM(CASE WHEN Slab_Value>= 300 AND Slab_Value < 1000 THEN Public_Rate ELSE 0 END) '+300',
SUM(CASE WHEN Slab_Value>= 1000 THEN Public_Rate ELSE 0 END) '+1000'
FROM your_output
GROUP BY AirLineName
...