能否在同一SQL查询中执行CASE查询并将结果存入表中?
问题解答
问题1:能否将CASE查询的结果保存到表中?
可以,有两种常用实现方式:创建新表存储结果,或更新现有表字段保存计算值。
方式1:创建新表存储结果(SELECT INTO)
基于你的示例代码,查询同时将结果(含CASE计算列)存入新表:
DECLARE @DateVal_1 DATE = '2022-07-01'; SELECT *, CASE WHEN FORMAT(@DateVal_1,'dddd') = 'Montag' THEN Mo_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Dienstag' THEN Di_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Mittwoch' THEN Mi_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Donnerstag' THEN Do_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Freitag' THEN Fr_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Samstag' THEN Sa_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Sonntag' THEN So_AnzahlMitarbeiter END AS Tag1_Anzahl_Ist INTO NewTable1 -- 自动创建新表并插入数据 FROM Table1;
方式2:更新现有表字段保存结果
若Table1已存在Tag1_Anzahl_Ist字段,直接用UPDATE结合CASE更新:
DECLARE @DateVal_1 DATE = '2022-07-01'; UPDATE Table1 SET Tag1_Anzahl_Ist = CASE WHEN FORMAT(@DateVal_1,'dddd') = 'Montag' THEN Mo_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Dienstag' THEN Di_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Mittwoch' THEN Mi_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Donnerstag' THEN Do_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Freitag' THEN Fr_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Samstag' THEN Sa_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Sonntag' THEN So_AnzahlMitarbeiter END;
问题2:是否可以执行CASE查询并在同一查询中将结果保存到表中?
当然可以,上述两种方式都能在同一查询内完成CASE计算和结果保存:
SELECT INTO会在执行查询的同时,将结果写入新表;UPDATE语句会在计算CASE值的同时,直接更新现有表的对应字段。
如果需要先通过CTE(公共表表达式)封装计算逻辑,再保存结果,也可以用以下写法:
DECLARE @DateVal_1 DATE = '2022-07-01'; WITH CalculatedData AS ( SELECT *, CASE WHEN FORMAT(@DateVal_1,'dddd') = 'Montag' THEN Mo_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Dienstag' THEN Di_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Mittwoch' THEN Mi_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Donnerstag' THEN Do_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Freitag' THEN Fr_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Samstag' THEN Sa_AnzahlMitarbeiter WHEN FORMAT(@DateVal_1,'dddd') = 'Sonntag' THEN So_AnzahlMitarbeiter END AS Tag1_Anzahl_Ist FROM Table1 ) -- 选择1:将计算结果存入新表 SELECT * INTO NewTable2 FROM CalculatedData; -- 选择2:更新原表(假设原表有主键ID) -- UPDATE t -- SET t.Tag1_Anzahl_Ist = c.Tag1_Anzahl_Ist -- FROM Table1 t -- JOIN CalculatedData c ON t.ID = c.ID;
内容的提问来源于stack exchange,提问作者Nino Stursa
相关产品推荐
相关产品推荐

