sql >> Databáze >  >> RDS >> Sqlserver

SQL dotaz pro použití sloupce jako vzorce pro výpočet hodnoty

Dynamický dotaz je (jediný) způsob, jak jít a není to tak složité:

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 DEMO

Ale musíte si být vědomi toho, jak je to náchylné k chybám. Pokud hodnota sloupce Vzorec není platná, přeruší dotaz na vzorec.

upravit :jít s UNION místo UNION ALL protože stejný vzorec se objevuje ve více řádcích

upravit2 :Plán B – Místo spouštění hromady stejných výběrových dotazů a rozlišování výsledků je lepší vytvořit na začátku odlišné vzorce:

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 – přidáno několik dalších řádků



  1. Nerozlišují se malá a velká písmena jako (jako) v Datamapperu s Postgresql

  2. Vytvářejte třídy C# založené na tabulce MySQL

  3. Vytvořit booleovský sloupec v MySQL s false jako výchozí hodnotou?

  4. Připojení oracle v aplikaci pro Android