Действуя по количеству строк результата sql - PullRequest
1 голос
/ 11 января 2012

Я начинаю с этого запроса:

SELECT     TOP 1 Parties.FirstName + ' ' + Parties.MiddleName + ' ' + Parties.LastName AS     Plaintiffs
FROM         Jackets INNER JOIN
                  JacketPartyLinks ON Jackets.Id =     JacketPartyLinks.Jacket_JacketPartyLink INNER JOIN
                      Parties ON Parties.Id = JacketPartyLinks.JacketPartyLink_Party
WHERE     (Jackets.Id = @JacketID) AND (JacketPartyLinks.Role = 0)

Что я хотел бы сделать, так это подсчитать, что было возвращено, и, если это одна строка, ничего не делать.Если это более одной строки, добавьте что-то вроде ", et al".Обратите внимание, что этот запрос возвращает один столбец, и хотя он должен иметь возможность работать автономно, он также должен работать как подзапрос.

Как это можно сделать?

РЕДАКТИРОВАТЬ: Добавить TOP 1

1 Ответ

4 голосов
/ 11 января 2012

Используйте top и count..over, а затем оберните его во внешний запрос, например, так:

select
    Plantiffs + case when PlantiffCount > 1 then ', et al' else '' end as Plantiffs
from
    (
        SELECT TOP 1
            Parties.FirstName + ' ' + Parties.MiddleName + ' ' + Parties.LastName as Plantiffs,
            count(1) over () as PlantiffCount
        FROM
            Jackets 
            INNER JOIN JacketPartyLinks ON 
                Jackets.Id = JacketPartyLinks.Jacket_JacketPartyLink 
            INNER JOIN Parties ON 
                Parties.Id = JacketPartyLinks.JacketPartyLink_Party
        WHERE
            (Jackets.Id = @JacketID) AND (JacketPartyLinks.Role = 0)
        order by Parties.LastName asc
    ) x

Часть over () после count говорит ему подсчитать все строки, а не group by ничего. Вот почему в этом запросе нет предложения group by. Вы можете использовать over с любой агрегатной функцией, что довольно изящно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...