Логика SQL - логика, включающая оператор Update с предложением Group By - PullRequest
0 голосов
/ 09 мая 2018

Попытка SQL после долгого времени.Нужна помощь в решении этой задачи.Я создал процедуру для обновления значений столбца от строки 1 до N на основе других комбинаций столбцов.В настоящее время заполняются другие столбцы, и вычисляемый столбец имеет значение null

Пример:

Account Category    Metric  Count   Calculated Cloumn 5
A          1         ABC     45             
A          1         DEF     25             
A          1         XYZ                    
B          5         ABC     29             
B          5         DEF        

В приведенной выше таблице «Вычисленный столбец 5» - это поле в поле «Фокус», которое должно быть рассчитано с использованием комбинации первых 4.поля,

ex:

if Account=a ,Category=1 and metric -abc,def,xyz then 
    sum(count) Group by Account and Category

Разные логики для разных комбинаций.

Сейчас я использую скрипт процедуры ниже:

SET @variable1 = (select sum(count)
    from table1
    where [Category]  = '1'
    and [ACCOUNT] = 'A'
    and [Metric Name] =  'ABC' );

SET @variable2 = 'select sum(count)
    from table1
    where [Category]  = '1'
    and [ACCOUNT] = 'B'
    and [Metric Name] =  'DEF' ';


update [dbo].[table1]
    set calculated field = (
    (case when 
        @variable1 > '0'
    then 
        @variable1
    else
        @variable2
    end)

Проблема сэтот сценарий заключается в том, что выходное значение реплицируется по всем строкам, а не только для этой комбинации.В основном мне нужно использовать Группу по столбцам Account и Category для вычисляемого поля, чтобы выходные значения отображались только для этой комбинации.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Я предполагаю, что SQL Server основан на синтаксисе.

Я не думаю, что переменные - это правильный подход. Для информации, которую вы предоставили:

with toupdate as (
      select t.*,
             sum(count) over (partition by Account, Category) as sum_1
      from t
     )
update toupdate
    set calculated_field = sum_1
    where Account = 'A' and Category = 1 and metric in ('abc', 'def', 'xyz);
0 голосов
/ 09 мая 2018

попробуйте это:

UPDATE [dbo].[table1]
    SET calculated field = (
    (CASE WHEN 
        @variable1 > '0'
    THEN 
        @variable1
    ELSE
        @variable2
    END)
WHERE [Category]  = '1'
    AND [ACCOUNT] = 'A'
    AND [Metric Name] =  'ABC'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...