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
和#Table2
之間的匹配來更新#Table1
:UPDATE基於聚合 - 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
這種失敗:
消息157,15級,狀態1,第33行
聚合不應出現在UPDATE語句的集合列表。
什麼版本的SQL Server?非常感謝表格結構,樣本數據和期望的結果。 –
2012,很高興你發現我的問題足夠。 – 007
在很多問題上,這就像拉牙齒試圖獲得這些細節。我問版本只是爲了整理一下腳本。 –