Как исправить 'Аргумент типа данных varchar недопустим для аргумента 1 функции форматирования.'в Мсскле - PullRequest
0 голосов
/ 16 апреля 2019

Привет из школы, я делаю несколько запросов. Теперь я сделал запрос, который получает рейтинг в разбивке: очень плохо, недостаточно, достаточно и очень хорошо. Теперь я рассчитываю, сколько процентов каждая категория в рейтинге с помощью следующего кода:

SELECT format(klasse, count(klasse) * 100 / (
            SELECT count(*)
            FROM (
                SELECT year(boekingsdatum) AS jaar
                    ,iif(rating IS NULL, 'Geen rating', iif(rating <= 3, 'Zwaar onvoldoende', iif(rating <= 5, 'Onvoldoende', iif(rating < 8, 'Voldoende', 'Zeer goed')))) AS Klasse
                FROM boeking b
                ) AS percentage
            ), 'p')
FROM (
    SELECT year(boekingsdatum) AS jaar
        ,iif(rating IS NULL, 'Geen rating', iif(rating <= 3, 'Zwaar onvoldoende', iif(rating <= 5, 'Onvoldoende', iif(rating < 8, 'Voldoende', 'Zeer goed')))) AS Klasse
    FROM boeking b
    ) AS b
GROUP BY klasse

Теперь, если выполнить этот запрос без формата, он выдаст правильные числа без символа%. но формат дает ошибку, которая в заголовке

1 Ответ

1 голос
/ 16 апреля 2019

Пытаясь понять, что вы пытаетесь сделать, я верю, что это то, что вы ищете.

SELECT klasse, format( count(klasse)*1. / (SELECT count(*)FROM boeking), 'p')
FROM (
    SELECT CASE WHEN rating IS NULL THEN 'Geen rating'
                WHEN rating <= 3 THEN 'Zwaar onvoldoende'
                WHEN rating <= 5 THEN 'Onvoldoende'
                WHEN rating < 8 THEN 'Voldoende'
                ELSE 'Zeer goed' END AS Klasse
    FROM boeking b
    ) AS b
GROUP BY klasse

Я должен оставить очень важную заметку.FORMAT сделает этот запрос намного медленнее, чем его форматирование во внешнем интерфейсе.Если здесь необходимо выполнить форматирование (без учета будущего использования столбца в качестве числа), можно использовать следующее.

SELECT klasse, CAST( CAST( count(klasse)*100. / (SELECT count(*)FROM boeking) AS decimal(10,2)) AS varchar(13)) + '%'
FROM (
    SELECT CASE WHEN rating IS NULL THEN 'Geen rating'
                WHEN rating <= 3 THEN 'Zwaar onvoldoende'
                WHEN rating <= 5 THEN 'Onvoldoende'
                WHEN rating < 8 THEN 'Voldoende'
                ELSE 'Zeer goed' END AS Klasse
    FROM boeking b
    ) AS b
GROUP BY klasse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...