Как лучше написать SQL для получения данных следующим образом? - PullRequest
0 голосов
/ 05 декабря 2009

У меня есть следующие две таблицы в БД SQL Server 2005
2- «UserInfomration» ---> (идентификатор (авто), имя, пол (бит))
1- «Конкуренты» ---> (Id (авто), UserID (FK из UserInformation.ID), Status (tinyint)
я хочу сделать хранимую процедуру, которая возвращает данные следующим образом
Статус - Мужской счет - Женский счет
1 45 15
2 10 50
3 20 60

Так кто-нибудь может поделиться со мной лучшим решением для этого
Мое решение было следующим:

SELECT  
        Competitors.Status, 
        COUNT(Competitors.ID) AS MaleCount , 
        (
            SELECT Count(C.ID) 
            FROM Competitors as C , UserInfomration as UI
            WHERE UI.UserID = C.UserID  AND UI.UserGender = 0 AND C.Status = Competitors.Status  
        ) as FemaleCount ,
        (MaleCount + FemaleCount) as total
FROM     
        UserInfomration LEFT OUTER JOIN
               Competitors ON UserInfomration.UserID = ISEFCompetitors.UserID
GROUP BY Competitors.Status, UserInfomration.UserGender
HAVING  (UserInfomration.UserGender = 1)
ORDER BY Competitors.Status

Заранее благодарим за ожидаемое сотрудничество

1 Ответ

1 голос
/ 05 декабря 2009

Вы можете попробовать что-то вроде этого

SELECT  c.Status,
        SUM(CASE WHEN u.Gender = 0 THEN 1 ELSE 0 END) Male, --assuming 0 is male
        SUM(CASE WHEN u.Gender = 1 THEN 1 ELSE 0 END) Female --assuming 1 is female
FROm    Competitors c INNER JOIN
        UserInfomration u ON c.UserID = u.ID
GROUP BY c.Status
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...