Добавление значений в таблицу в SQL 2008 - PullRequest
1 голос
/ 26 октября 2010

Попытка получить общее представление о T-SQL здесь, в SQL Server 2008. Предположим, у меня есть таблица с именем «Проблемы» со столбцами, такими как:

Priority User
1        Foo
1        Foo
2        Foo
5        Foo
4        Bar
5        Bar
1        Bar
1        Fuz

и я хочу отобразить счетчик Приоритета для каждого Пользователя, а также разбивку по каждому Приоритету, чтобы итоговая таблица с именем «Разбивка» могла выглядеть так:

User Total 1 2 3 4 5
Foo  4     2 1 0 0 1
Bar  3     1 0 0 1 1
Fuz  1     1 0 0 0 0

Я думал, что мог бы объявить переменные и написать что-то вроде

DECLARE @P1 INT
DECLARE @P2 INT
DECLARE @P3 INT
DECLARE @P4 INT
DECLARE @P5 INT

SELECT COUNT(id) AS Total,UserName, 
CASE Priority
 WHEN 1 Then @P1 = @P1 + 1
 WHEN 2 Then @P2 = @P2 + 1
 WHEN 3 Then @P3 = @P3 + 1
 WHEN 4 Then @P4 = @P4 + 1
 WHEN 5 Then @P5 = @P5 + 1
END,
FROM Breakdown
GROUP BY UserName

но я уверен, что я на неправильном пути. У кого-нибудь есть предложения?

Спасибо, и извините за нубистский вопрос; но я не уверен, что именно гуглить здесь ...

-R.

Ответы [ 2 ]

4 голосов
/ 26 октября 2010

Использование:

  SELECT i.user, 
         COUNT(i.priority) AS total,
         SUM(CASE WHEN i.priority = 1 THEN 1 ELSE 0 END) AS 1,
         SUM(CASE WHEN i.priority = 2 THEN 1 ELSE 0 END) AS 2,
         SUM(CASE WHEN i.priority = 3 THEN 1 ELSE 0 END) AS 3,
         SUM(CASE WHEN i.priority = 4 THEN 1 ELSE 0 END) AS 4,
         SUM(CASE WHEN i.priority = 5 THEN 1 ELSE 0 END) AS 5
    FROM ISSUES i
GROUP BY i.user

Это сводный запрос, преобразовывающий данные строки в столбчатые данные.
Не проблема с новичком / новичком, с которой нужно иметь дело. SQL Server 2005+ добавил (теперь ANSI) синтаксис PIVOT / UNPIVOT , но он переносим для большинства баз данных (поскольку в настоящее время немногие поддерживают PIVOT / UNPIVOT).

2 голосов
/ 26 октября 2010

Вам нужно выбрать один столбец для каждого столбца, который вы хотите в вашем наборе результатов. В вашем SQL вы выбираете только три столбца. Попробуйте:

SELECT UserName,
       Count(*) AS Total, 
       SUM(CASE Priority WHEN 1 THEN 1 ELSE 0 END) AS P1_Total,
       SUM(CASE Priority WHEN 2 THEN 1 ELSE 0 END) AS P2_Total,
       SUM(CASE Priority WHEN 3 THEN 1 ELSE 0 END) AS P3_Total,
       SUM(CASE Priority WHEN 4 THEN 1 ELSE 0 END) AS P4_Total,
      SUM(CASE Priority WHEN 5 THEN 1 ELSE 0 END) AS P5_Total
FROM Issues 
GROUP BY UserName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...