Не удалось связать идентификатор нескольких деталей в производной таблице - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь запустить СУММУ МАКСИМАЛЬНЫХ значений, а затем обновить их в столбце. Я думаю, что производная таблица - верный путь, но теперь я продолжаю получать идентификатор, состоящий из нескольких частей, не может быть связана ошибка, которую я не знаю, как обойти.

Я запускаю это в SSMS,и это будет мой Db для PowerApp. По сути, я пытаюсь взять различные или MAX значения часов оценки из нескольких блоков, а затем сложить их вместе, сгруппированные по идентификационному номеру персонала. Я работаю с производной таблицей, чтобы попытаться смешать две агрегатные функции.

    WITH pretotalAssessment as
    (
    SELECT dbo.StaffTotals.Entry_ID, ISNULL(SUM(maxAssess),0) AS maxAssessHours
    FROM
    (
        SELECT dbo.StaffTotals.Entry_ID, dbo.Units.[Unit Name],
        ISNULL(MAX(dbo.Units.[Assessment Hours]),0) AS maxAssess
        FROM dbo.Units
        INNER JOIN dbo.StaffTotals ON dbo.StaffTotals.Entry_ID = dbo.Units.Entry_ID
        GROUP BY dbo.StaffTotals.Entry_ID,dbo.Units.[Unit Name]
        )Units
    )
    UPDATE preStaffTotals
    SET preStaffTotals.Assessment = pretotalAssessment.maxAssessHours
    FROM dbo.StaffTotals AS preStaffTotals
    INNER JOIN pretotalAssessment ON preStaffTotals.Entry_ID = pretotalAssessment.Entry_ID;

Моя ошибка:

"Не удалось связать идентификатор из нескольких частей" dbo.StaffTotals.Entry_ID ".

Я все еще новичокдля SQL, так что это все кривая обучения для меня!

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

ВЫ ВЫБИРАЕТЕ полную [schema]. [TableName]. [ColumnName] для dbo.StaffTotals.Entry_ID FROM Units.

Перейдите на следующее, и оно должно работать;

WITH pretotalAssessment as
(
SELECT Entry_ID, ISNULL(SUM(maxAssess),0) AS maxAssessHours
FROM
    (
    SELECT dbo.StaffTotals.Entry_ID, dbo.Units.[Unit Name],
    ISNULL(MAX(dbo.Units.[Assessment Hours]),0) AS maxAssess
    FROM dbo.Units
    INNER JOIN dbo.StaffTotals ON dbo.StaffTotals.Entry_ID = dbo.Units.Entry_ID
    GROUP BY dbo.StaffTotals.Entry_ID,dbo.Units.[Unit Name]
    )Units
    GROUP BY Entry_ID

)
UPDATE preStaffTotals
SET preStaffTotals.Assessment = pretotalAssessment.maxAssessHours
FROM dbo.StaffTotals AS preStaffTotals
INNER JOIN pretotalAssessment ON preStaffTotals.Entry_ID = pretotalAssessment.Entry_ID;

Я бы также предложил использовать COALESCE () вместо ISNULL (), так как COALESCE () является стандартом ANSI, а ISNULL () isn«т. Также COALESCE () может иметь несколько аргументов, тогда как ISNULL () может иметь только 1. Так проще для будущих изменений dev. итак;

WITH pretotalAssessment as
(
SELECT Entry_ID, COALESCE(SUM(maxAssess),0) AS maxAssessHours
FROM
    (
    SELECT dbo.StaffTotals.Entry_ID, dbo.Units.[Unit Name],
    COALESCE(MAX(dbo.Units.[Assessment Hours]),0) AS maxAssess
    FROM dbo.Units
    INNER JOIN dbo.StaffTotals ON dbo.StaffTotals.Entry_ID = dbo.Units.Entry_ID
    GROUP BY dbo.StaffTotals.Entry_ID,dbo.Units.[Unit Name]
    )Units
    GROUP BY Entry_ID

)
UPDATE preStaffTotals
SET preStaffTotals.Assessment = pretotalAssessment.maxAssessHours
FROM dbo.StaffTotals AS preStaffTotals
INNER JOIN pretotalAssessment ON preStaffTotals.Entry_ID = pretotalAssessment.Entry_ID;
0 голосов
/ 08 октября 2019

Ваш первый SELECT в CTE взят из производной таблицы. Это означает, что dbo.StaffTotals недоступен в списке SELECT.

Вам необходимо заменить:

SELECT dbo.StaffTotals.Entry_ID

на:

SELECT Units.Entry_ID
...