Как правильно использовать функцию count для внутреннего соединения, чтобы получить правильные результаты
Я написал некоторый sql-код, который не дает правильных результатов, которые я ищу. У меня есть 2 таблицы, одна из которых является записью заказа, а другая-накопительной таблицей. Я внутренне соединяю 2 таблицы и сохраняю свои результаты во временной таблице.
Проблема, которая у меня есть с кодом, заключается во внутреннем соединении, где я сопоставляю на основе столбцов cprj. Я хочу, чтобы функции count выполнялись в кумулятивной таблице для cprj, а функция sum-в таблице orderentry для столбца NoPartsPerLine. Что-то не так в коде после раздела " ON " внутреннего соединения.
Ответ, который я, кажется, получаю, заключается в том, что он подсчитывает строки в кумулятивной таблице, а затем умножает на # строк для того же cprj, который существует в таблице orderentry. Я попробовал оператор select top 1 для таблицы orderentry, но он вообще не дал никаких результатов. Когда (XMLLines.cprj) = PartList.cprj, это дает умноженный результат.
Результаты, которые я ищу, например:
cprj TotalRowCount DWRowCount SumNoPartsPerLine CumuCount
Тек#55555 60 8 25 6
Таблицы, которые я использую, таковы:
[OrderEntry] Table ID cprj TotalRowCount DWRowCount NoPartsPerLine 1 TEK#7000 80 26 10 2 TEK#4444 50 30 2 3 TEK#88888 120 24 15 4 TEK#4700 37 13 6 5 TEK#99999 53 42 8 203 TEK#5555 60 8 10 203 TEK#5555 60 8 5 203 TEK#5555 60 8 5 203 TEK#5555 60 8 2 203 TEK#5555 60 8 3
и
[MatchingRowsRUwithRU-DWCALCS-DATA-ProjectCumulative] table ID cprj item PartNumber SWITEM QTY 196 TEK#7000 A23-3171-X A23-3171\2583 1.2 2 197 TEK#5555 N02-0846-X N02-0846A5\59\2583 2 1 198 TEK#7000 N02-0846-X N02-0846A5\59\2583 2 1 199 TEK#5555 A23-1354-X A23-1354\2583 2.3 2 200 TEK#7000 A23-1354-X A23-1354\2583 2.3 2 201 TEK#7000 B11-0304-X B11-0304\25 2.4 2 202 TEK#7000 B11-0304-X B11-0304\25 1.4 2 203 TEK#5555 B11-0304-X B11-0304\25 2.4 2 204 TEK#5555 B11-0304-X B11-0304\25 1.4 2 205 TEK#5555 B11-0305-X B11-0305\59 1.5 2 206 TEK#5555 B11-0305-X B11-0305\59 2.5 2 207 TEK#7000 B11-0305-X B11-0305\59 1.5 2
Любая помощь будет оценена по достоинству!
Что я уже пробовал:
DECLARE @tmp TABLE ( ID INT, [cprj] [varchar](500) NULL, [TotalRowCount] [int] NULL, [DWRowCount] [int] NULL, [SumNoPartsPerLine] [int] NULL, [CumuCount] [int] NULL ) ----------------------------------------inner join between order entry and cumulative table and insert results into @tmp table INSERT INTO @tmp (cprj, TotalRowCount, DWRowCount, SumNoPartsPerLine, CumuCount) SELECT XMLLines.[cprj], PartList.TotalRowCount, PartList.DWRowCount, sum (PartList.NoPartsPerLine) SumNoPartsPerLine, count (XMLLines.cprj) CumuCount FROM OrderEntry.dbo.OrderEntry as PartList INNER JOIN SSIS.dbo.[MatchingRowsRUwithRU-DWCALCS-DATA-ProjectCumulative] AS XMLLines ON --(XMLLines.cprj) = PartList.cprj (Select top 1 cprj from OrderEntry.dbo.OrderEntry) = (XMLLines.cprj) GROUP BY XMLLines.cprj, PartList.DWRowCount, TotalRowCount ; SELECT * FROM @tmp