2013-11-10 4 views
1

ниже - мои таблицы в базе данных.рассчитать оплату в соответствии с количеством детей

enter image description here

Я хотел рассчитать оплату в зависимости от количества детей.

Скажем, оплата = 100 долларов США в год. Это должно быть время по количеству детей.

У меня есть ярлык, на котором будет отображаться количество детей. Теперь, sql-запрос, который я сделал до сих пор, но я знаю, что это звучит очень неправильно. Я просто изучаю sql сейчас. Пожалуйста, помогите мне.

SELECT COUNT(*) FROM Child WHERE ParentId=ParentId 

ответ

0

После растрескивания головы в течение 1 часа. Я сам решил этот вопрос.

SELECT COUNT(*) FROM Child c INNER JOIN Parent par on c.ParentId = par.ParentId WHERE par.UserId = ?

Спасибо за ваше время.

2

JOIN две таблицы Child, Parent и Payment:

WITH CTE 
AS 
(
    SELECT 
     p.parentId, 
     p.FirstName, 
     p.LastName, 
     COUNT(c.ChildId) AS NOfChilderen 
    FROM Child AS c 
    INNER JOIN Parent AS p ON c.ParentId = p.ParentId 
    GROUP BY p.parentId, 
      p.FirstName, 
      p.LastName 
) 
SELECT 
    c.parentId, 
    c.FirstName, 
    c.LastName, 
    NOfChilderen * p.PaymentAmount AS TotalAmount 
FROM CTE AS C 
INNER JOIN Payment AS p ON p.UserId = p.UserId; 

CTE (Common table expression) рассчитает не из childeren для каждого из родителей путем объединения двух таблиц Parent и child, то он будет присоединитесь к другой таблице payment и вычислите общую сумму для каждого родителя.

+0

похоже сложный. Не могли бы вы сократить его? потому что я хотел отображать значение только в метке. – Roshan

+0

@ t3es - это будет рассчитать общий платеж для всех родителей, умножив количество childeren на столбец 'PaymentAmount'. Это правда? Как вы хотите рассчитать общий платеж? Вы хотите только одно значение или для всех строк? Можете ли вы дать пример данных и желаемый результат? Будет очень полезно понять, что вы хотите сделать. Спасибо :) –

+0

Обратитесь к приведенному выше коду и пользовательскому интерфейсу. – Roshan

1
SELECT PARENT.PARENTID, COUNT(*)*100 AS PAYMENT, COUNT(*) AS NUMBEROFCHILDREN 
FROM PARENT LEFT JOIN CHILDREN ON PARENT.PARENNID=CHILDREN.CHILDRENID 
GROUP BY PARENT.PARENTID 

Я использовал левое соединение, как только вы можете иметь родителя без детей?

Смежные вопросы