Я новый специалист по SQL Server / T-SQL и на некоторое время застрял в проблеме:
У меня есть таблица SQL (содержащая более 100 000 строк) для использования в сочетании с MS Excel. Я пытаюсь записать «хранимую процедуру», автоматизирующую некоторые исправления данных. Часть моих данных и ожидаемые результаты следующие:
Current Data
Date Shift WSNo WONo StockNo PTime BDPlanned
04.01.2017 1 JP-MAK-053 7148 21842 2.250,00 0
04.01.2017 1 JP-MAK-053 7148 21842 26.550,00 2.961,00
04.01.2017 1 JP-MAK-053 7148 21843 0 0
04.01.2017 1 JP-MAK-053 7148 21843 0 0
Expected Result
Date Shift WSNo WONo StockNo PTime BDPlanned
04.01.2017 1 JP-MAK-053 7148 21842 28.800,00 2.961,00
04.01.2017 1 JP-MAK-053 7148 21843 28.800,00 2.961,00
1) Что ожидалось:
Первый «Дата + Shift + WSNo (Key1)» является уникальным, и оператор SQL должен вычислять «Total PTime» и / или «Total BDPlanned» для Key1.
Затем рассчитанные результаты на основе Key1 должны быть равномерно распределены по элементам на основе второго уникального «Date + Shift + WSNo + StokNo (Key2)».
(Примечание. Ожидаемые результаты должны быть сохранены в новой таблице, отличной от текущей таблицы)
2) Для достижения результатов я попробовал следующие утверждения:
а)
CREATE TABLE #myTable1
(Date date,
Shift varchar(2),
WSNo varchar(25),
WONo Float,
StockNo float,
PTime float);
INSERT INTO #myTable1
SELECT Date, Shift, WSNo, WONo, SUM(PTime) AS TPTime
FROM myTable
WHERE WONo = 3786
GROUP BY Date, Shift, WSNo, WONo, CONCAT(Date,'+' , Shift,'+' ,WONo)
CREATE TABLE #myTable2
(Date date,
Shift varchar(2),
WSNo varchar(25),
WONo Float,
StockNo float,
PTime float);
INSERT INTO #myTable2
SELECT Date, Shift, WSNo, WONo, StockNo, SUM(PTime) AS TPTime
FROM myTable
WHERE WONo = 3786
GROUP BY Date, Shift, WSNo, WONo, StockNo,
SELECT StockNo
,[TPTime] = CASE T21.PTime
WHEN (
SELECT S22.PTime
FROM #myTable2 T22
WHERE T22.StockNo = T21.StockNo
)
THEN (
SELECT SUM(PTime)
FROM #myTable1 S11
WHERE T21.StockNo = T11.StockNo
)
FROM #myTable2 T21
Сообщение об ошибке:
Сообщение 512, Уровень 16, Состояние 1, Строка 1
Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.
б) Когда я установил другой оператор с помощью «INNER JOIN», я получил нижеуказанную ошибку:
«Сообщение 4104, уровень 16, состояние 1, строка 2»
Не удалось связать многокомпонентный идентификатор «T11.PTime».
в) Для другой попытки, установив «StockNo» в качестве переменной (@StockNo) и, таким образом, присвоить вычисленные значения переменной из каждой таблицы Temp; Я снова получил сообщение об ошибке
«Не удалось связать многоэлементный идентификатор«… ».
Я не уверен, если бы на этой платформе уже была решена та же проблема, но было бы очень признательно, если бы вы помогли мне разобраться с этим.
Большое спасибо заранее и очень-очень жаль за мою длинную почту.
С уважением