Harpreet_125 Ответов: 1

Добавьте один подзапрос к существующему запросу, чтобы получить процент из другой таблицы


я работаю над многоуровневым маркетинговым сайтом на основе бинарного дерева.Ниже запрос возвращает мне общее количество членов Левой и правой сторон. Ниже запрос работает нормально. Теперь я хочу добавить еще одно условие в нижеприведенный запрос. Это в основном будет суб-запрос. я не знаком с подзапросами или вложенными запросами. так что мне нужна ваша помощь, ребята.

cmd = new SqlCommand("declare @nodeid int = '"+cust_id+ "';with cte as (select cust_id, parentid, joinside, null left_node, null right_node from  user_detail where cust_id = @nodeid union all select t.cust_id, t.parentid, t.joinside,ISNULL(cte.left_node, CASE WHEN t.joinside = 0 THEN 1 ELSE 0 END) left_node,ISNULL(cte.right_node, CASE WHEN t.joinside = 1 THEN 1 ELSE 0 END) right_node from  user_detail t inner join cte on cte.cust_id = t.parentid ) select @nodeid nodeid, SUM(left_node) LeftNodes,SUM(right_node) RightNmodes from cte option (maxrecursion 0)", con);


Я хочу вот что: у меня есть еще одна таблица рассрочки, в которой есть столбец флага, содержащий значения "оплачено" и "не оплачено". я хочу подсчитать %возраст клиентов с левой и правой стороны, которые заплатили рассрочку определенного идентификатора. мне нужно это условие в приведенном выше запросе. надеюсь, вы, ребята, поняли мой вопрос. Спасибо

Что я уже пробовал:

я еще ничего не пробовал.. я не знаком с вложенными или подзапросами.

Wendelius

Не могли бы вы опубликовать определения таблиц для всех таблиц, участвующих в запросе. Это поможет разобраться в ситуации

Maciej Los

Обратите внимание, что ваша sql-команда уязвима для sql-инъекций!

1 Ответов

Рейтинг:
1

dbrenth

Не видя структуры вашей таблицы, я могу только догадываться, чего вы хотите.

Простой подзапрос для того, что вы хотите, будет включен в ваше предложение WHERE и может выглядеть следующим образом:

WHERE ...<existing clause>...
AND cte.InstallmentId in (Select InstallmentId from Installments where flag = 'paid')

Теперь этот подзапрос может быть настолько простым или сложным, насколько вам нужно, но он должен возвращать список из одного столбца, который вы можете запросить с помощью предложения "IN".

Если вам нужно несколько столбцов, вы также можете присоединиться к подзапросу.

В вашем разделе таблицы вы можете сделать

FROM ...<existing from clause>...
LEFT OUTER JOIN (Select InstallmentId, Age from Installments where flag = 'paid') as I on cte.InstallmentID = I.InstallmentID and cte.Age = I.Age

Надеюсь, этого достаточно, чтобы заставить вас идти.

Брент