2015-01-27 1 views
-1

мне нужно умножить значение столбца с другим значением столбца, а затем найти общую суммуSQL столбец умножения из другой суммы столбца

SubjectTable 

SubjectMarksId SubjectCode Marks 

1     4ww  50 
2     8qw  50 
3     7uy  50 

MarksType 

MarksTypeId MarksType StudentCount Marks 
1   Sports  1  10 
2   Math   1  10 
3   English  1  1 
4   Physics  1  10 // Marks sum(10+10+1*50+10) multiply condition, where MarksTypeId=3 with SubjectCode = 8qw in SubjectTable 

вот как я пытался умножить

select StudentMark*(SELECT Marks AS SubjectMark 
FROM SubjectTable 
WHERE SubjectCode = '8qw') 
from 
(
SELECT Marks AS StudentMark 
FROM MarksType 
WHERE MarksTypeId= '3' 

) src 

наконец ниже это сумма, она работает нормально, но как умножить другое значение столбца, то найти общую сумму?

SELECT Student.StudentId, Student.Name, sum(MarksType.Marks) as TotalMarks 
FROM 
MarksType 
INNER JOIN 
MarksDetails on MarksType.MarksTypeId = MarksDetails.MarksTypeId 
INNER JOIN 
Student on Student.StudentId = MarksDetails.StudentId 

group by Student.Name,Student.StudentId 

любая помощь была бы замечательной.

 UPDATE: 

деталей таблицы менее обеспечить из-за ситуации, поэтому выход был неправ, во всяком случае, благодаря @Darka и Piyush. в следующий раз с моей стороны детали будут предоставлены ясным способом, если потребуется, я могу удалить этот вопрос с помощью модераторов. Потому что это может повлиять на изучение других людей.

+2

Непонятно, как 'SubjectTable' связан с' MarksType'? И как выглядит «MarksDetails»? – Darka

+1

Я имею в виду, почему MarksTypeId = '3' должен быть умножен, а другой нет ...? Как знать? – Darka

+0

@stom: - Я думаю, ваш подход совершенно неправильный, вы не даете информацию о таблице и отношения, которые находятся в вашем запросе. У вас есть лучшее решение, если вы предоставляете таблицы struture с образцами данных и ожидаемым выходом. потому что то, что вы написали в своем вопросе, очень неясно, и его трудно найти логику позади этого – HaveNoDisplayName

ответ

0

Вы можете сделать математику внутри функции SUM, т.е.

SUM(Column1 * Column2) as Result 
0

Вы можете сделать так:

SELECT SUM(MT.Marks * ISNULL(T.Marks,1)) 
FROM MarksType AS MT 
OUTER APPLY (
       SELECT ST.Marks 
       FROM SubjectTable AS ST 
       WHERE ST.SubjectCode = '8qw' AND MT.MarksTypeId= 3 
      ) AS T(Marks) 

И последнее SUM может быть, как это (только гадать, как не предусмотрено никаких данных) :

SELECT Student.StudentId, Student.Name, sum(MT.Marks * ISNULL(T.Marks,1)) as TotalMarks 
FROM MarksType AS MT 
OUTER APPLY (
       SELECT ST.Marks 
       FROM SubjectTable AS ST 
       WHERE ST.SubjectCode = '8qw' AND MT.MarksTypeId= 3 
      ) AS T(Marks) 
INNER JOIN MarksDetails 
    on MT.MarksTypeId = MarksDetails.MarksTypeId 
INNER JOIN Student 
    on Student.StudentId = MarksDetails.StudentId 
group by Student.Name,Student.StudentId 
+1

, если OP не предоставил данные, почему вы угадываете, пусть он предоставляет данные. и все же почему только умножить на MarksTypeId 3, вопрос очень неясен – HaveNoDisplayName

+1

yeap согласился, но то, что он сказал: умножьте только MarksTypeId = 3. Нельзя сказать, что это неправильно: D – Darka