CREATE TABLE #Table1
(
ID INT Identity (1,1), Col1 varchar(10),
Col2 DateTime2(7), Col3 INT, COl4 INT
);
INSERT INTO #Table1 VALUES
('Part1','2014-01-23 22:00:00.0000000', NULL, NULL),
('Part2','2014-01-23 23:00:00.0000000', NULL, NULL),
('Part3','2014-01-23 23:00:00.0000000', NULL, NULL),
('Part3','2014-01-23 23:30:00.0000000', NULL, NULL);
CREATE TABLE #Table2
(
ID INT Identity (1,1), C1 varchar(10), C2 varchar(10),
C3 bit, C4 Varchar(10), C5 DateTime2(7)
);
INSERT INTO #Table2 VALUES
('One', 'First', 1, 'Part1','2014-01-23 22:00:00.0000000'),
('Two', 'Second', 1, 'Part1','2014-01-23 22:00:00.0000000'),
('Three', 'Third', 0, 'Part1','2014-01-23 22:00:00.0000000'),
('Four', 'Fourth', 1, 'Part2','2014-01-23 23:00:00.0000000'),
('Five', 'Fifth', 0, 'Part2','2014-01-23 23:00:00.0000000'),
('Six', 'Sixth', 1, 'Part3','2014-01-23 23:00:00.0000000'),
('Seven', 'Seventh', 1, 'Part3','2014-01-23 23:00:00.0000000'),
('Eight', 'Eight', 0, 'Part3','2014-01-23 23:30:00.0000000');
Я хочу обновить #Table1
на основе соответствия между #Table1
и #Table2
по этому условию:UPDATE на основе Aggregation - T/SQL
ON T1.Col1 = T2.C4 AND T1.Col2 = T2.C5
И агрегатные T2.C3
значения для обновления значения для T1.Col3
и T1.Col4
где :
T1.Col3 = COUNT(T2.C3 WHERE T2.C3 = 1)
T1.Col4 = COUNT(T2.C3 WHERE T2.C3 = 0)
Ожидаемое содержание #Table1
после обновления:
ID Col1 Col2 Col3 Col4
-- ----- ---------------- ---- ----
1 Part1 2014-01-23 22:00 2 1
2 Part2 2014-01-23 23:00 1 1
3 Part3 2014-01-23 23:00 2 0
4 Part3 2014-01-23 23:30 0 1
Моя неудачная попытка в обновлении:
UPDATE T1
SET T1.Col3 = SUM(CASE WHEN T2.C3 = 1 THEN 1 ELSE 0 END)
,T1.Col4 = SUM(CASE WHEN T2.C3 = 0 THEN 1 ELSE 0 END)
FROM #Table1 T1 INNER JOIN #Table2 T2
ON T1.Col1 = T2.C4 AND T1.Col2 = T2.C5
Это терпит неудачу с:
Msg 157, Level 15, State 1, Line 33
Агрегат не может появиться в установленный список оператора UPDATE.
какая версия SQL Server? Большое спасибо за структуру таблицы, образцы данных и желаемые результаты. –
2012 и рад, что вы нашли мой вопрос адекватным. – 007
На * много вопросов, это как вытаскивание зубов, пытающихся получить эти особенности. Я спросил о версии, чтобы немного приукрасить сценарий. –