Неверное имя столбца при установке новой переменной, равной выражению - PullRequest
2 голосов
/ 04 апреля 2019

Мне нужно рассчитать процентное значение на основе двух столбцов в моем запросе и сохранить это число в новой переменной.Когда я устанавливаю переменную, равную выражению, я получаю ошибку «Неверное имя столбца».

SELECT
Count(Case When HMC_Place_Position is null Then 0 end) as Parts,
COUNT(*) AS Total_Parts,                                                                        /*Total Parts */

COUNT(CASE
    WHEN Outfeed_Place_Time IS NOT NULL THEN 1      
END) AS Total_Good_Parts                                                                        /*Total Good Parts */

FROM PartData_GKN05_C
WHERE Infeed_Pick_Time >= DATEADD(day,-7, GETDATE()) 
ALTER TABLE  PartData_GKN05_C Add Total_Good_Parts int
DECLARE @Total_Good_Percent AS float = ((Total_Good_Parts / Total_Parts)*100)

Ответы [ 2 ]

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

Я полагаю, что вы рассчитываете получить процент «хороших» деталей от общего количества записей деталей в PartData_GKN05_C.

Поэтому, используя ваше определение «хороших деталей» (Outfeed_Place_Time IS NOT NULL),запрос ниже подсчитывает их, а затем делит на количество всех записей деталей в таблице.

Поскольку "count ()" возвращает целочисленное значение, мы должны преобразовать одно из "count ()" в число с плавающей точкой, ДО того, как мы разделим их так, чтобы SQL не возвращал ноль (так как "int / int"msgstr "не возвращает десятичные дроби, в то время как делает float).

Нам нужно преобразовать только один из «Count ()», потому что SQL неявно преобразует другой, но вы можете явно преобразовать оба в float, если хотите.

Вот код:

DECLARE 
    @Total_Good_Percent float

SELECT
    @Total_Good_Percent =   (
                                COUNT(
                                    CASE
                                        WHEN Outfeed_Place_Time IS NOT NULL
                                            THEN 1
                                        END
                                )
                                /convert(float,count(*))
                            )*100
FROM 
    PartData_GKN05_C
WHERE 
    Infeed_Pick_Time >= DATEADD(day, -7, GETDATE());

select
    @Total_Good_Percent
0 голосов
/ 04 апреля 2019

попробуйте этот код:

DECLARE @Total_Good_Parts INT, @Total_Parts INT;
SELECT
--Count(Case When HMC_Place_Position is null Then 0 end) as Parts,
@Total_Parts = COUNT(*), 
@Total_Good_Parts = COUNT(CASE
                              WHEN Outfeed_Place_Time IS NOT NULL
                              THEN 1
                          END)
FROM PartData_GKN05_C
WHERE Infeed_Pick_Time >= DATEADD(day, -7, GETDATE());

ALTER TABLE PartData_GKN05_C
ADD Total_Good_Parts INT;

DECLARE @Total_Good_Percent AS FLOAT= ((@Total_Good_Parts / @Total_Parts) * 100.00);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...