Я пытаюсь использовать CROSS APPLY
в SQL, но хочу использовать результаты вызова только в том случае, если возвращаемое количество строк больше 1.
У меня есть следующий SQL:
INSERT INTO @dest (val1, val2, val3)
SELECT t2.crossVal, t2.crossVal2, t1.tempVal
FROM @tempTable t1
CROSS APPLY dbo.TableValuedFunction(t1.IDColumn) t2
В некоторых случаях CROSS APPLY
возвращает несколько строк, но в подавляющем большинстве возвращает одну строку (поскольку все строки @tempTable
имеют соответствующий результат из функции).Мне интересно только вставить те из них, которые имеют кратные соответствующие результаты из CROSS APPLY
.
Я пытаюсь не вставлять все, а затем делать удаление впоследствии,Действительно интересно посмотреть, есть ли какое-либо агрегирующее действие, которое я могу применить к этому утверждению, как оно есть.
Есть идеи?
Редактировать: в ответ на ответ SQLMenace,Я получаю следующие результаты, где левый столбец является tempVal, средний столбец - crossVal, правый столбец - crossVal2:
a : 1 : z0
b : 1 : z0
a : 2 : z1
b : 2 : z1
c : 1 : z0
d : 1 : z0
Я хочу отбросить строки "c: 1: z0" и "d: 1: z0 ".Кроме того, это может повлиять на группировки, поэтому я упомяну об этом, мой последний запрос содержит два столбца, возвращаемых из функции, и один столбец из временной таблицы.
Конечный запрос в основном подсчитывает родителей строки tempTable, гдесуществует более одного родителя (возвращенного в виде таблицы из функции). Я хочу выполнить вставку и записать порядок родителя (снова возвращенный из функции).crossVal - это родительский идентификатор, а crossVal2 - это порядковый номер типа int.