SQL Server - всегда округляется в большую или меньшую сторону в зависимости от условия

В python 3.6.3 с pandas 0.22.0 вы также можете использовать concat до тех пор, пока вы установите в качестве индекса столбцы, которые вы хотите использовать для соединения

pd.concat(
    (iDF.set_index('name') for iDF in [df1, df2, df3]),
    axis=1, join='inner'
).reset_index()

где df1, df2 и df3 определяются так же, как в ответе Джона Галта

import pandas as pd
df1 = pd.DataFrame(np.array([
    ['a', 5, 9],
    ['b', 4, 61],
    ['c', 24, 9]]),
    columns=['name', 'attr11', 'attr12']
)
df2 = pd.DataFrame(np.array([
    ['a', 5, 19],
    ['b', 14, 16],
    ['c', 4, 9]]),
    columns=['name', 'attr21', 'attr22']
)
df3 = pd.DataFrame(np.array([
    ['a', 15, 49],
    ['b', 4, 36],
    ['c', 14, 9]]),
    columns=['name', 'attr31', 'attr32']
)

0
задан andrewbradley 16 January 2019 в 16:49
поделиться

2 ответа

Вы можете сделать что-то вроде этого:

select case when action in ('YES') then CAST(price AS DECIMAL(10,2)) 
        when action in ('NO') then LEFT(price, 4) 
        else price end as RoundPrice

для тестирования:

SELECT CAST(1.1264 AS DECIMAL(10,2))

SELECT LEFT(1.1264,4)

Надеюсь, это поможет

0
ответ дан Kim Lage 16 January 2019 в 16:49
поделиться

В итоге я использовал окольный способ использования функции CEILING, см. Ниже для SQL:

case when action in ('YES') then round(price, 3, 1) 
            when action in ('NO') then CEILING(price*1000)/1000 
            else price end as RoundPrice
0
ответ дан andrewbradley 16 January 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: