Нужен креативный Sql Query :: HELP - PullRequest
       9

Нужен креативный Sql Query :: HELP

2 голосов
/ 11 февраля 2010

У меня есть таблица, простая таблица, всего 3 поля.

ID Type Date

Пример данных (набор записей показывает 3 из 300)

154 | страница | 2010-02-08

154 | ссылка | 2010-02-08

154 | форма | 2010-02-08

Id: просто идентификатор для клиента

Тип: может быть только 3 вещи, которые уже заполнены ('form', 'page', 'link')

Дата: просто дата создания

Существует несколько записей для каждого идентификатора.

Я хочу создать хранимую процедуру или запрос, который дает мне следующий вывод

Пример желаемого выхода / счета

ID | Ссылка | Форма | Page

154 | 75 | 40 | 100

Мне просто нужен счетчик каждого типа, поэтому мне не нужно делать 3 отдельных вызова SQL, чтобы получить счетчик каждого типа. Любая помощь будет принята с благодарностью, для этого нужно перейти к хранимой процедуре, и все, на чем я хочу основывать это, это идентификатор.

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 11 февраля 2010

Возможно, вы захотите что-то вроде этого

Select id
, Sum(Case when Type='Link' then 1 else 0 end) as Links
, Sum(Case when Type='Forms' then 1 else 0 end) as Forms
, Sum(Case when Type='Page' then 1 else 0 end) as Pages
From SomeTable
Group by ID
2 голосов
/ 11 февраля 2010

Простой запрос PIVOT должен решить проблему

SELECT *
FROM SimpleTable 
PIVOT
(
    COUNT(Date)
    FOR Type IN ([Link], [Form], [Page])
) AS t
1 голос
/ 11 февраля 2010

Попробуйте (sql server)

SELECT
    [ID]
        ,SUM( CASE TYPE WHEN 'LINK' THEN 1 ELSE 0 END ) AS [Link]
        ,SUM( CASE TYPE WHEN 'FORMS' THEN 1 ELSE 0 END ) AS [FORMS]
        ,SUM( CASE TYPE WHEN 'PAGE' THEN 1 ELSE 0 END ) AS [Page]
    FROM yourTable
    GROUP BY ID       --remove this line if you are passing in a single @GivenID
    WHERE ID=@GivenID --remove this line if you want counts for all IDs (returns many rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...