我认为这是一个非常基本的问题,但我找不到如何在SQL Server中做到这一点的答案。我有一个表:
<表类>
ID
Pref_01
Pref_02
…
Pref_40
tbody><<tr>01 5 2 … 7 02 6 7 … 5 表类>
请尝试以下解决方案。
它使用SQL Server的XML和XQuery功能来实现你需要的。
值得注意的点:
- 第一个
CROSS APPLY
将每一行的列标记为XML。 - 第二个
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]);
<表类>id Pref_01 Pref_02 Pref_40 sum-columns-across-the-row tbody><<tr>1 5 2 7 14 26 7 5 18 表类>