Нужен ли мне сводный запрос для этого примера или это проще? - PullRequest
0 голосов
/ 13 октября 2011

У меня есть таблица, в которой записывается успех / неудача определенного запуска задания для каждого элемента, который он обрабатывает.

Некоторые тестовые данные и немного моего тестирования показаны ниже.

CREATE TABLE #TestData
(
ItemType  VARCHAR(10),
Task      VARCHAR(10),
Status    INT,
BatchId   INT)

INSERT INTO #TestData
SELECT 'A', 'D', 1, 5
UNION ALL
SELECT 'A', 'D', 1, 5
UNION ALL         
SELECT 'A', 'D', 2, 5
UNION ALL
SELECT 'A', 'U', 1, 5
UNION ALL
SELECT 'A', 'U', 2, 5
UNION ALL
SELECT 'B', 'D', 1, 6
UNION ALL 
SELECT 'B', 'D', 1, 6
UNION ALL 
SELECT 'B', 'D', 2, 6
UNION ALL 
SELECT 'B', 'U', 1, 6

SELECT * FROM #TestData

SELECT BatchId, 
       ItemType, 
       Task,
       COUNT(CASE WHEN [status] = 1 THEN [status] ELSE 0 END) as [Success], 
       COUNT(CASE WHEN [status] = 2 THEN [status] ELSE 0 END) AS [Failed]
FROM #TestData
GROUP BY BatchId, ItemType, Task
ORDER BY BatchId

DROP TABLE #TestData

То, что я хотел бы видеть здесь, - это отдельная строка для каждой комбинации BatchId, ItemType и Task, а затем счетчик количества успехов и неудач.

Так что для данных, опубликованных выше, я бы ожидал увидеть;

Batch  ItemType Task  Success  Failed
  5       A      D      2        1
  5       A      U      1        1
  6       B      D      2        1
  6       B      U      1        0

Могу ли я сделать это без необходимости сводной таблицы? Любая помощь очень ценится.

1 Ответ

2 голосов
/ 13 октября 2011

Похоже, это будет работать для вас:

SELECT BatchId, 
       ItemType, 
       Task
       ,sum(CASE WHEN [status] = 1 THEN 1 ELSE 0 END) as [Success]
       ,sum(CASE WHEN [status] = 2 THEN 1 ELSE 0 END) AS [Failed]
FROM #TestData
GROUP BY BatchId, ItemType, Task
ORDER BY BatchId
...