2017-04-27 24 views
0

SQL Serverで三角形のように下に描画する方法は?SQL Serverで三角形を描画する方法は?

enter image description here

私は2つのWHILEループによってそれを実装したいが、私は、SQL Serverの内の1行に20「*」を印刷することはできません。

どうすればこの問題を解決できますか?

+5

なぜ* *任意のループを使用するのですか? SQLはループを必要としません。 Numbersテーブルをまだお持ちでない場合は、1から20までのシーケンスを生成する方法が必要です。 –

+2

['REPLICATE'](https://docs.microsoft.com/en-us/) us/sql/t-sql/functions/replicate-transact-sql)関数 –

+0

なぜあなたはこれをしたいですか?私に学校の割り当てのいくつかの並べ替えのように聞こえます。 – BdR

答えて

5

返信を中に入れてください。私はあなたが正しくそれを行う場合、あなたはあなたの希望する出力を達成することができると思いますか?

DECLARE @i INT = 20 

WHILE(@i>0) 
BEGIN 
    PRINT REPLICATE('* ', @i); 
    SET @i = @i - 1; 
END 
+1

SQLでループの任意の種類を使用することは、それがちょうどパズルを解決する場合でも、悪い考えです。 –

+1

これはちょうど良いプログラミングの質問です。ハビバスクリプトは良いです。実際のシナリオでは、ループやカーソルを回避することはできませんし、それを使用する上で害がない状況があります。実際には@KumarHarsh、ループとカーソルを避けることができます。 – KumarHarsh

+0

ループが必要な場合は非常にまれです。ほとんどの場合、ループはより難しく、遅くなり、多くのブロックを引き起こします。 –

0

DECLARE @StrLen INT = 20 

WHILE @StrLen >= 1 
BEGIN 
    PRINT REPLICATE('*',@StrLen) 
    SET @StrLen = @StrLen - 1 
END 
7

あなたは文字を一定の回数を繰り返してREPLICATEを使用することができ、これを試してみてください。 1から20までの数字のシーケンスを生成するには、とにかくWHILEは必要ありません.SQLでは、実際にはデータを操作するのにWHILEステートメントは必要ありません。

ほとんどのSQL開発者がNumbers tableを作成する理由は、数字のシーケンスが常に有用なためです。

まだお持ちでない場合は、20個の数字を生成するために迅速かつ汚い方法は、システム・テーブルから上位20行を選択し、行番号などを計算するためにROW_NUMBERを使用することです:

​​

数字テーブルを使用すると、クエリが単純である:

select replicate('*',Number) 
from dbo.Numbers 
where Numbers.Number <= 20 
order by Number desc 

番号テーブルは、非常に有用である200日のような要素のセットのために例えば、2017年1月1日から始まる:

select dateadd(d,Number,cast('20170101' as date)) 
from dbo.Numbers 
where Numbers.n<= 20 
order by Number desc 
関連する問題