Как сделать так, чтобы столбец подсчитывал количество раз, когда поле BIT равно нулю, а другой столбец - количество раз, которое оно равняется? - PullRequest
1 голос
/ 11 декабря 2011

У меня есть следующая таблица:

CREATE TABLE [dbo].[PartsWork](
    [parts_work_id] [int] IDENTITY(1,1) NOT NULL,
    [experiment_id] [int] NOT NULL,
    [partition_id] [int] NULL,
    [part_id] [int] NOT NULL,
    [sim_time] [int] NULL,
    [real_time] [datetime] NULL,
    [construction] [bit] NULL,
    [destruction] [bit] NULL,
    [duration] [int] NULL )

Я хочу написать SQL, который выводит part_id, количество раз construction is = 1 и число раз destruction is = 1 для данного experiment_id AND partition_id.

Я могу сделать это, используя многозначные табличные функции и цикл, но я бы хотел сделать это в одном SQL. Это возможно?

1 Ответ

1 голос
/ 11 декабря 2011

Чтобы получить все значения part_id, вам нужно предложение OVER в COUNT (это встроенное агрегирование без использования GROUP BY)

SELECT
    part_id,
    COUNT(CASE WHEN construction = 1 THEN 1 END) OVER () AS CountConstructionIs1,
    COUNT(CASE WHEN destruction = 1 THEN 1 END) OVER () AS CountDestructionIs1
FROM
   [dbo].[PartsWork]
WHERE
    experiment_id = @experiment_id
    AND
    partition_id = @partition_id

См. MSDN для получения дополнительной информации

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