フィールド(a:int、b:int、c:int、d:int)を持つテーブルがあります 私はストアプロシージャを作成しています。このストアプロシージャは、文字列( 'a'または 'b'または 'c'または 'd')を返し、その列に合計を戻す必要があります。 私は、SQLサーバーに2005カラム名を知っている値を選択
答えて
はあなたを再設計してください複数の列に対して同じ操作を実装しようとしていないようにします。 SQLテーブルがスプレッドシートに似ているからといって、それはそのように扱うべきではありません。
複数の列がある場合、複数の行がある場合は複数の列があり、これらの値を区別するために列が追加されている場合は、何らかの形の属性分割が行われているようです年の各月の "値"を表す12列よりも、月と "値"を格納する2つの列を持つ必要があります)。
あなたは正しいです。再設計は最善の方法と思われる。ご意見ありがとうございます。しかし、このテーブルはプログラム内のフォームと同じだと考えています。それで、それを扱うことは難しいようになります。とにかく、column_nameをパラメータの文字列として持つだけでデータに到達する方法があると思います。 – Masoud
私は最高の答えと思われます。そして私はそれに印をつけます。しかし、もう少し話してください。 – Masoud
動的コードを使用しないと(あなたが却下したように)、それを行う方法はありません。単一のSQL文は、常に同じ「形状」を持つ結果セットを生成します。つまり、常に同じ列を持ちます。「同じ」は、同じ名前とタイプを持つことを意味します。選択した列を変更することはできないため(要求されたものより簡単なタスク)、要件を達成することはできません。 –
を使用していますが、プロシージャ内の動的SQLを使用して
SELECT SUM(
CASE @col -- the param of the stored procedure
WHEN 'a' THEN col_a
WHEN 'b' THEN col_b
WHEN 'c' THEN col_c
ELSE col_d END) AS sum_of_column
FROM my_table
代替を要約するために適切な列を選択するためにCASE式を使用することができます
DECLARE @sql AS VARCHAR(MAX)
SET @sql = 'SELECT SUM(' + @col +') FROM my_table'
EXEC (@sql)
- 1. 選択カラム名
- 2. Linqで異なるカラム名を選択
- 3. カラム/テーブル名に基づいてインデックスを選択する
- 4. カラム1の値が特定の値に等しいカラム2の別の値を選択する
- 5. カラムのグループを選択
- 6. カラムの値に応じて選択するMySQLの乗算
- 7. カラムdbの選択
- 8. Rテーブルの連続していないカラムを選択する
- 9. カラム値からカラム名を取得
- 10. J2MEのネットワークオペレータ名を知っている
- 11. 計算カラムを選択する方法
- 12. SQL Server 2005最後に知っている良いデータを選択する
- 13. 複数の条件テーブルからNHibernateを使ってカラムを選択する
- 14. MySQLは、カラム名、値
- 15. 別の選択の値に基づいて選択値を変更する
- 16. カラム前のバージョンを選択してください。
- 17. 選択は、私は選択を持って選択
- 18. ネットワークオペレータ名を知っています
- 19. データベース内のカラム情報を選択
- 20. MySQLは手元にあるカラム名を知らない
- 21. 選択値から選択した値を選択します。
- 22. カラムから最大値を選択してください。最大値を返しません。
- 23. MySQLでカラムをグループ化して選択する
- 24. ナビゲーションドロワー:現在選択されているアイテムを知る方法?
- 25. 従来の知恵Jquery:どのように私は等を選択したことを知っている
- 26. カラム名としてのMySQLハッシュ値
- 27. テーブル名としてのカラムの値
- 28. 他のテーブルに格納されている動的カラム名を使用してMySqlカラム値を取得する
- 29. 新しいテーブルのフィールド名としてカラムの値を使用
- 30. PostgreSQLのvarcharカラムからのみ整数値を選択する方法
私はcolumn_nameを使用してexecと一緒に使うことができますが、execは別の接続を開くことができます。私は別の接続を開けたくありません。 – Masoud
私は他の方法を知らない。ストアドプロシージャで直接SQLコードを構築しない理由 – niktrs
書くとき:a、bをxから選択する---> aとbは特殊なポインタです。彼らは単純な文字列ではありません。そのポインタを見つける方法があるはずです。 – Masoud