0

毎月 1 列のテーブルがあるとします。12 の異なる select ステートメントを記述する必要がないように、何らかの方法でこの 12 列をループすることは可能ですか?

それ以外の

SELECT a.ArtikelName,a.Number, 
jan = (SELECT b.Month1 FROM Budget b LEFT OUTER JOIN on b.number = a.number),
feb = (SELECT b.Month2 FROM Budget b LEFT OUTER JOIN on b.number = a.number),
mar = (SELECT b.Month3 FROM Budget b LEFT OUTER JOIN on b.number = a.number),
apr = (SELECT b.Month4 FROM Budget b LEFT OUTER JOIN on b.number = a.number),
may = (SELECT b.Month5 FROM Budget b LEFT OUTER JOIN on b.number = a.number),   
FROM Artikel a

どういうわけかここでループを作成して、別の月を通過することはできますか? 月番号を除けば、まさにくだらない質問だからです。

4

7 に答える 7

2

Budgetに一度参加しArtikelます。

SELECT a.ArtikelName,a.Number, 
jan = b.Month1,
feb = b.Month2,
FROM Artikel a
LEFT OUTER JOIN Budget b on b.number = a.number

ところで、私はLEFT JOINあなたの奇妙な構文を見たことがありません。それが何を意味するのかさえよくわかりません。JOIN誰もが知っていて理解している標準的な構文を使用する方がよいでしょう。

于 2013-10-08T14:35:41.887 に答える
1

このようなもの:

SELECT a.ArtikelName,a.Number, 
b.Month1 as Jan,
b.Month2 as Feb
... etc. 
FROM Artikel a
LEFT OUTER JOIN Budget b on b.number = a.number
于 2013-10-08T14:35:49.527 に答える
0

これが SQL Transact/SQL Server の場合、EXEC sp_columns '' を使用できます。指定されたテーブルのすべてのデータとその列名とデータ型が返されます。このリンクを確認してください -> http://technet.microsoft.com/en-us/ライブラリ/aa259626(v=sql.80).aspx

次に、各列を処理するためにCURSORに配置できます。カーソルについては、このリンクを確認してください-> http://technet.microsoft.com/en-us/library/ms180169.aspx

于 2013-10-08T14:38:47.837 に答える
0

これが SQL Server 2005 以降のデータベースである場合は、少し異なるアプローチを取り、PIVOT / UNPIVOT. これにより、読みやすさだけでなく、今後の柔軟性も向上します。

詳細な MSDN 記事へのリンクと例を次に示します。この場合、UNPIVOT解決策になります。

于 2013-10-08T14:48:54.950 に答える
0

データベースのテーブルと列をループする方法がありますが、12 行よりもはるかに多くのコードが必要になるため、このケースのショートカットではありません。それを回避するために、ここに例のリンクがあります:http://dushi.co.uk/2009/07/15/loop-through-database-tables-and-columns/

基本的に、列の数を計算し、それぞれに対して選択クエリを生成します。

于 2013-10-08T14:43:40.577 に答える