SQL Server中具有相同前缀的列之和



我认为这是一个非常基本的问题,但我找不到如何在SQL Server中做到这一点的答案。我有一个表:

<表类> ID Pref_01 Pref_02 … Pref_40 tbody><<tr>0152…70267…5

请尝试以下解决方案。

它使用SQL Server的XML和XQuery功能来实现你需要的。

值得注意的点:

  1. 第一个CROSS APPLY将每一行的列标记为XML。
  2. 第二个CROSS APPLY正在总结XML元素名称(和原始列名)匹配特定命名约定的值。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (id INT IDENTITY PRIMARY KEY, Pref_01 INT, Pref_02 INT, Pref_40 INT);
INSERT @tbl (Pref_01, Pref_02, Pref_40) VALUES
(5, 2, 7),
(6, 7, 5);
-- DDL and sample data population, end
SELECT t.*
, [sum-columns-across-the-row]
FROM @tbl AS t
CROSS APPLY (SELECT t.* FOR XML PATH(''), TYPE, ROOT('root')) AS t1(x)
CROSS APPLY (SELECT x.value('sum(/root/*[contains(local-name(), "Pref_")]/text()) cast as xs:integer?', 'INT')) AS t2([sum-columns-across-the-row]);

<表类>idPref_01Pref_02Pref_40sum-columns-across-the-rowtbody><<tr>152714267518

最新更新