2012-03-13 3 views
4

У меня есть это SQL, но то, что я искал, чтобы сделать было иметь еще один столбец, который имел весь столбец других матчей, как это ...SQL Динамического SUM столбца значения

enter image description here

declare @SchoolID int 
declare @RoleID int 
declare @match int 
declare @firstname varchar 

set @SchoolID=1 
set @RoleID=1 

SELECT  
    dbo.Teacher.Firstname, 
    dbo.School.SchoolName, 
    dbo.School.SchoolID, 
    dbo.RoleTitle.RoleTitle, 
    CASE WHEN dbo.School.SchoolID = @SchoolID then 1 else 0 end as [SchoolMatch], 
    CASE WHEN dbo.JobTitle.RoleTitleID = @RoleID then 1 else 0 end as [RoleMatch] 

FROM   
    dbo.School INNER JOIN 
    dbo.Lesson ON dbo.School.SchoolID = dbo.Lesson.SchoolID INNER JOIN 
    dbo.RoleTitle ON dbo.Lesson.RoleTitleID = dbo.RoleTitle.RoleTitleID INNER JOIN 
    dbo.Teacher ON dbo.Lesson.TeacherID = dbo.Teacher.TeacherID 
+0

@bluefeet ОП показал желаемые результаты (см. Скриншот). –

ответ

4

Вы можете просто повторить свои заявления, тематические и добавить их.

SELECT 
    . 
    . 
CASE WHEN dbo.School.SchoolID = @SchoolID then 1 else 0 end + 
    CASE WHEN dbo.JobTitle.RoleTitleID = @RoleID then 1 else 0 end as [NewColumn] 
+0

спасибо за это. Существует также способ суммирования столбцов. Мне нужен союз для этого? – okenshield

+0

@okenshield - Вы имеете в виду как одну дополнительную строку в конце с суммой всех строк? Вы можете решить это с помощью дублированного запроса в «union» или, возможно, вы можете использовать [ROLLUP] (http://msdn.microsoft.com/en-us/library/ms189305%28v=sql.90%29.aspx) , Я никогда не использовал его, поэтому я не мог сказать, как это должно быть сделано в вашем случае. Я предполагаю, что я, вероятно, подытожу его в клиентском коде где-нибудь и не буду беспокоить SQL Server этим. Зависит от того, где вы собираетесь его использовать. –

2

Вы можете сделать что-то вроде этого:

SELECT  
    dbo.Teacher.Firstname, 
    dbo.School.SchoolName, 
    dbo.School.SchoolID, 
    dbo.RoleTitle.RoleTitle, 
    CASE WHEN dbo.School.SchoolID = @SchoolID then 1 else 0 end as [SchoolMatch], 
    CASE WHEN dbo.JobTitle.RoleTitleID = @RoleID then 1 else 0 end as [RoleMatch], 
    (CASE WHEN dbo.School.SchoolID = @SchoolID then 1 else 0 end)+ 
    (CASE WHEN dbo.JobTitle.RoleTitleID = @RoleID then 1 else 0 end) AS NewColumn 
FROM   
    dbo.School INNER JOIN 
    dbo.Lesson ON dbo.School.SchoolID = dbo.Lesson.SchoolID INNER JOIN 
    dbo.RoleTitle ON dbo.Lesson.RoleTitleID = dbo.RoleTitle.RoleTitleID INNER JOIN 
    dbo.Teacher ON dbo.Lesson.TeacherID = dbo.Teacher.TeacherID 
+0

Это SQL Server, он поддерживает CTE. –

+0

Не видел этого. Обновлен ответ. – Arion

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