sql >> データベース >  >> RDS >> Sqlserver

列を式として使用して値を計算するSQLクエリ

    動的クエリは (唯一の) 方法であり、それほど複雑ではありません:

    DECLARE @query NVARCHAR(MAX) = '';
    
    SELECT @query = @query + '
    UNION 
    SELECT ItemID, Price, Size, Formula, ' + Formula + ' AS CalcValue FROM YourTable WHERE Formula = ''' + Formula + ''' ' 
    FROM YourTable;
    SET @query = STUFF(@query,1,8,'');
    
    PRINT @query;
    
    EXEC (@query);
    

    SQLFiddle デモ

    ただし、これがいかにエラーを起こしやすいかを認識しておく必要があります。数式列の値が有効でない場合、数式クエリが壊れます。

    編集 :UNION で行く UNION ALL の代わりに 同じ数式が複数の行に表示されているため

    編集2 :プラン B - 一連の同じ選択クエリを実行して結果を区別する代わりに、最初に個別の式を作成することをお勧めします:

    DECLARE @query NVARCHAR(MAX) = '';
    
    WITH CTE_DistinctFormulas AS 
    (
        SELECT DISTINCT Formula FROM YourTable
    )
    SELECT @query = @query + '
    UNION ALL 
    SELECT ItemID, Price, Size, Formula, ' + Formula + ' AS CalcValue FROM YourTable WHERE Formula = ''' + Formula + ''' ' 
    FROM CTE_DistinctFormulas;
    SET @query = STUFF(@query,1,12,'');
    
    PRINT @query;
    
    EXEC (@query);
    

    SQLFiddle DEMO 2 - さらにいくつかの行を追加



    1. SQL Server(T-SQL)でのCURRENT_TIMESTAMPの例

    2. plpgsqlのトリガー関数の複数の列を更新します

    3. MySQLで日時をUTCに変換する方法

    4. 最も類似した数値行を見つけるためのMySQLクエリ