<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>お遊び♪</title><link>http://blogs.wankuma.com/route/category/2176.aspx</link><description>お遊び♪</description><managingEditor>Route（佐久間　竜也）</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Route（佐久間　竜也）</dc:creator><title>[T-SQL]１から１０まで足す</title><link>http://blogs.wankuma.com/route/archive/2009/10/06/181903.aspx</link><pubDate>Tue, 06 Oct 2009 03:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/route/archive/2009/10/06/181903.aspx</guid><wfw:comment>http://blogs.wankuma.com/route/comments/181903.aspx</wfw:comment><comments>http://blogs.wankuma.com/route/archive/2009/10/06/181903.aspx#Feedback</comments><slash:comments>228</slash:comments><wfw:commentRss>http://blogs.wankuma.com/route/comments/commentRss/181903.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/route/services/trackbacks/181903.aspx</trackback:ping><description>&lt;DIV class=body_01&gt;
&lt;DIV class=normal_div&gt;ご無沙汰しております。&lt;BR&gt;
そろそろ出尽くしたかな？と思われる「1から10までの総和をループを使わずに書く」ですが、&lt;BR&gt;
せっかくなのでT-SQLでカーソルを使わずに表現してみました。&lt;BR&gt;
&lt;BR&gt;
基本的に既出の計算方法だけれど、こういう時になんとなくいつも蚊帳の外に追いやられてる気がする
&lt;div class=head_02 style="padding-top:10px;padding-bottom:10px;"&gt;＞SQLもたまにはまぜて～&lt;/DIV&gt;
ということで。
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE class=SQL name="code"&gt;
--まずはデータ準備
DECLARE @DATA TABLE(value int)
INSERT INTO @DATA(value) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)

--列挙w
SELECT
	l1.value + l2.value + l3.value + l4.value + l5.value 
	+ l6.value + l7.value + l8.value + l9.value + l10.value
FROM @DATA l1 
INNER JOIN @DATA l2  ON l1.value =  l2.value - 1
INNER JOIN @DATA l3  ON l2.value =  l3.value - 1 
INNER JOIN @DATA l4  ON l3.value =  l4.value - 1
INNER JOIN @DATA l5  ON l4.value =  l5.value - 1
INNER JOIN @DATA l6  ON l5.value =  l6.value - 1
INNER JOIN @DATA l7  ON l6.value =  l7.value - 1
INNER JOIN @DATA l8  ON l7.value =  l8.value - 1
INNER JOIN @DATA l9  ON l8.value =  l9.value - 1
INNER JOIN @DATA l10 ON l9.value = l10.value - 1;

--再帰クエリ
WITH Calc(value, sumValue) AS
(
  SELECT value, value FROM @DATA WHERE value = (SELECT MIN(value) FROM @DATA)
  UNION ALL
  SELECT L.value, C.sumValue + L.value
  FROM @DATA L JOIN Calc C ON L.value - 1 = C.value  
)
SELECT sumValue FROM Calc WHERE value = (SELECT MAX(value) FROM @DATA)
--SELECT MAX(sumValue) FROM Calc でもOK

--最後は素直に
SELECT (MAX(value) + MIN(value)) * COUNT(value) / 2 FROM @DATA
&lt;/pre&gt;

&lt;DIV class=body_02&gt;
いじょ～
&lt;/DIV&gt;&lt;img src ="http://blogs.wankuma.com/route/aggbug/181903.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>